使用Chutzpah和ReSharper进行Jasmine测试中的ReferenceError

时间:2016-01-21 15:44:43

标签: visual-studio-2013 typescript jasmine resharper chutzpah

我正在使用Jasmine和Chutzpah在PhantomJS的Visual Studio 2013中测试我的TypeScript项目。如果我使用Chutzpah上下文菜单扩展运行测试它们工作正常但是当我使用ReSharper测试资源管理器运行它们时,如果存在任何外部依赖项,它们将失败。错误消息为ReferenceError: $ is not defined

我的项目结构如下:

- Scripts
  - MyApp
    - Components
      - DatePicker.ts
  - Tests
    - Components
      - DatePickerTest.ts
  - typings
    - jquery
      - jquery.d.ts
  - jquery-1.10.2.js
Chutzpah.json

Chutzpah.json看起来像

{
    "Framework": "jasmine",
    "Compile": {
        "Mode": "External",
        "Extensions": [ ".ts" ],
        "ExtensionsWithNoOutput": [ ".d.ts" ]
    },
    "References": [
        {
            "Includes": [
                "*/Scripts/jquery-1.10.2.js"
            ],
            "Excludes": [ "*/Scripts/*.d.ts" ]
        }
    ],
    "Tests": [
        {
            "Includes": [ "*/Scripts/Tests/*.ts" ],
            "Excludes": [ "*/scripts/Tests/*.d.ts" ]
        }
    ]
}

DatePickerTest.ts看起来像

/// <reference path="../../myapp/components/datepicker.ts" />
import DatePicker = MyApp.Components.DatePicker;

describe("Datepicker", () => {
    var datePicker: DatePicker
    beforeEach(() => {
        datePicker = new DatePicker();
    });

    // tests
});

实例化DatePicker失败并显示消息ReferenceError: $ is not defined,因为该类在构造函数中使用$.extend()

我尝试通过添加行/// <chutzpah_reference path="../../jaquery-1.10.2.js" />在测试的顶部声明对jQuery的引用,但这没有任何区别。另外我的理解是在Chutzpah.json中添加引用意味着我不应该这样做。

正如this answer中所建议的,我已经在浏览器中调试了我的测试,确实没有在index.html页面中加载jQuery,所以我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题归结为ReSharper如何根据找到的类型定义引用尝试解析依赖关系。 ReSharper unit testing docs说:

  

如果您的测试文件使用声明文件(* .d.ts)引用和(原文如此)外部JavaScript库,ReSharper将使用* .d.ts文件的名称搜索原始JavaScript文件。

我正在测试的类是引用jQuery定义文件:

/// <reference path="../../typings/jquery/jquery.d.ts" />

问题在于我的项目中还包含jquery.cookie.js(作为基金会的一部分),而ReSharper错误地将其包括在内而不是jquery-1.10.2.js

重命名或删除jquery.cookie.js允许ReSharper找到正确的jQuery文件并解决了问题。