我正在使用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
页面,所以我做错了什么?
好像你需要添加一个jQuery TypeScript声明文件(“jquery.d.ts”)作为nuget包到项目中,并在测试文件中引用它 - https://www.jetbrains.com/resharper/帮助/ Unit_Testing_in_TypeScript.html –
我确实在我的项目中有这样的情况,我只是没有把它放在我的问题中,因为我认为它不相关,但我已经编辑过现在添加它。 –
您是否在DatePickerTest.ts中添加了“jquery.d.ts”引用?顺便说一句,您使用的ReSharper版本是什么 - ReSharper |帮助|关于JB ReSharper Ultimate? –