为什么这些resharper Jasmine测试在浏览器中运行,而不是在phantomjs中运行

时间:2013-09-03 13:41:37

标签: javascript visual-studio-2012 jasmine phantomjs resharper-7.1

提前感谢所有阅读此内容的人 - 这个问题有很多细节。

我正在尝试使用Jasmine将javascript测试引入我们的项目中。我写的测试在浏览器中工作,但没有通过Resharper使用PhantomJS。

我猜我错过了解析我们的JS文件所需的管道(也许我正在确定我们的JS设置有问题)。任何帮助都非常感激......

我使用jasmine在Visual Studio中设置了Jasmine测试...

// The Jasmine Test Framework
/// <reference path="../jquery-1.10.1.js"/>
/// <reference path="lib/jasmine-1.3.1/jasmine.css"/>
/// <reference path="lib/jasmine-1.3.1/jasmine.js"/>
/// <reference path="lib/jasmine-1.3.1/jasmine-html.js"/>
/// <reference path="lib/jasmine-jquery.js"/>
/// <reference path="lib/mock-ajax.js"/>
// Classes to test
/// <reference path="../MyNamespace.Navigation.js"/>

describe("Breadcrumbs", function () {
    it("should have a window object", function() {
        //this test passes in PhantomJS and the browser
        expect(window).toBeDefined();
    });

    it("should have the base object available", function() {
        //this test only passes in the browser
        expect(window.MyNamespace).toBeDefined();
    });
});

这引用了一个包含...

的JS文件
(function (app, $, undefined) {
     //do things here
}(window.MyNameSpace = window.MyNamespace || {}, jQuery));

我有一个可以成功运行我的测试的SpecRunner.html ...它是独立于Jasmine 1.3.1附带的specrunner html,其头部编辑如此......

 <link rel="stylesheet" type="text/css" href="lib/jasmine-1.3.1/jasmine.css">
  <script type="text/javascript" src="../jquery-1.10.1.js"></script>
  <script type="text/javascript" src="lib/jasmine-1.3.1/jasmine.js"></script>
  <script type="text/javascript" src="lib/jasmine-1.3.1/jasmine-html.js"></script>

  <!-- include source files here... -->
  <script type="text/javascript" src="../MyNamespace.Navigation.js"></script>

  <!-- include spec files here... -->
  <script type="text/javascript" src="spec/BreadcrumbsSpec.js"></script>

这些测试是由我的SpecRunner.html(运行正常)或通过使用PhantomJS的Resharper 7s testrunner运行的,我猜测它不会评估我的JS代码文件中的代码..?


更新:一些额外的细节...

Resharper版本是:

  

JetBrains ReSharper 7.1.3完整版Build 7.1.3000.2254 on   2013-04-10T16:48:18

和Phantom JS版本是1.9.1.0

我刚刚意识到我的问题中没有实际错误 - Doh!

TypeError: 'undefined' is not an object (evaluating 'window.MyNamespace.Whatever') in http://localhost:47815/Tests.js (line 26)
TypeError: 'undefined' is not an object (evaluating 'window.MyNamespace.Whatever')
    at  BreadcrumbsSpec.js: line 26
    at  jasmine.js: line 1035
    at  jasmine.js: line 2053
    at  jasmine.js: line 2006
    at  jasmine.js: line 2335
    at  jasmine.js: line 2053
    at  jasmine.js:2043

有趣的是Tests.js不是我的文件 - 我想这是一个R#的东西。

啊 - Tests.js是我的spec文件(即本例中的BreadcrumbsSpec.js)。如果我启动开关选项告诉Resharper TestRunner使用浏览器我得到相同的结果(即只定义了窗口)和浏览器中的空白页面......

1 个答案:

答案 0 :(得分:5)

尤里卡......问题是ID-ten-T,也称为PEBCAK

我没有想过或调查过R#实际上是如何运行测试的。因此,在Spec.js中设置相对于 my specrunner.html的参考路径

R#实际上将Spec文件作为内联脚本注入到html页面中,所以我的相对路径都是错误的。

我只是将参考路径设置为项目根目录中的绝对路径,一切都很好。

// The Jasmine Test Framework
/// <reference path="/Scripts/jquery-1.10.1.js"/>
/// <reference path="/Scripts/tests/lib/jasmine-1.3.1/jasmine.js"/>
/// <reference path="/Scripts/tests/lib/jasmine-1.3.1/jasmine-html.js"/>
/// <reference path="/Scripts/tests/lib/jasmine-jquery.js"/>
/// <reference path="/Scripts/tests/lib/mock-ajax.js"/>
// Classes to test
/// <reference path="/Scripts/MyNamespace.Navigation.js"/>

感谢R#人在Twitter上与我联系!