我正在使用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,所以我做错了什么?
答案 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文件并解决了问题。