2016-01-21 85 views
0

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

我的项目结构如下:

- 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所示,我在浏览器中调试了我的测试,确信jQuery没有被加载到index.html页面,所以我做错了什么?

+0

好像你需要添加一个jQuery TypeScript声明文件(“jquery.d.ts”)作为nuget包到项目中,并在测试文件中引用它 - https://www.jetbrains.com/resharper/帮助/ Unit_Testing_in_TypeScript.html –

+0

我确实在我的项目中有这样的情况,我只是没有把它放在我的问题中,因为我认为它不相关,但我已经编辑过现在添加它。 –

+0

您是否在DatePickerTest.ts中添加了“jquery.d.ts”引用?顺便说一句,您使用的ReSharper版本是什么 - ReSharper |帮助|关于JB ReSharper Ultimate? –

回答

0

问题归结为ReSharper如何基于找到的类型定义引用尝试解析依赖项。该ReSharper unit testing docs说:

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

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

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

问题是,我也有包含在我的项目jquery.cookie.js(如基金会的一部分),以及ReSharper的被错误地包括代替的jquery-1.10.2.js

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

相关问题