2016-01-21 53 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文件並解決問題。

相關問題