4

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

我正在尝试使用 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 于 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 是我的规范文件(即本例中的 BreadcrumbsSpec.js)。如果我启动开关选项来告诉 Resharper TestRunner 使用浏览器,我会得到相同的结果(即只定义了窗口)和浏览器中的空白页面......

4

1 回答 1

5

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

我没有考虑或调查过 R# 是如何实际运行测试的。因此在 Spec.js 中设置了相对于的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 上与我互动!

于 2013-09-04T12:33:59.283 回答