从 JS 测试文件中使用 Karma 和 Jasmine 测试编译后的 TypeScript
Testing compiled TypeScript with Karma and Jasmine from a JS test file
我有一个结构如下的项目:
build
- out.js
spec
- foo.spec.js
- bar.spec.js
src
- foo.ts
- bar.ts
这两个 .ts 文件被构建到 out.js
。在我的 .spec.js
文件中,我希望能够轻松引用 out.js
。
在纯 JS 项目中使用 Karma/Jasmine 时,我只是使用 RequireJS,并将我的测试文件包装在 define(['a'], function(a) { ... });
文件中。然后,在 a.js
中,内容将像这样包装:
define([], function() {
Foo.prototype. .......
Foo.prototype. .......
return Foo;
});
但是,因为 out.js 将由 TypeScript 编译器构建,因此不能包装在 define(...)
块中,我无法使用 RequireJS 正确导入它。
澄清一下:
有了手写的JS,如下图,我可以把它导入到我的测试文件中:
define([], function() {
function Bla() { }
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
});
使用类似的 JS,但使用 TypeScript 编译器构建,因此缺少 define([])
包装器,当我将其导入测试时,我只是得到 undefined
。
var Bla = (function () {
function Bla() { }
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
})();
我如何配置 TypeScript 编译器将我编译的 classes 包装在 define()
包装器中,或者我如何配置我的测试以导入 class 而不是包裹在 define()
包装纸中?
你应该使用 "--module amd" 参数
在 visual studio 2015 年:项目/"your project" properties/Typescript Building/module system/amd
下一个:
bla.ts:
function Bla() {
}
Bla.prototype.hi = function () {
return "hey";
};
export = Bla;
bla.js:
define(["require", "exports"], function (require, exports) {
function Bla() {
}
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
});
我有一个结构如下的项目:
build
- out.js
spec
- foo.spec.js
- bar.spec.js
src
- foo.ts
- bar.ts
这两个 .ts 文件被构建到 out.js
。在我的 .spec.js
文件中,我希望能够轻松引用 out.js
。
在纯 JS 项目中使用 Karma/Jasmine 时,我只是使用 RequireJS,并将我的测试文件包装在 define(['a'], function(a) { ... });
文件中。然后,在 a.js
中,内容将像这样包装:
define([], function() {
Foo.prototype. .......
Foo.prototype. .......
return Foo;
});
但是,因为 out.js 将由 TypeScript 编译器构建,因此不能包装在 define(...)
块中,我无法使用 RequireJS 正确导入它。
澄清一下:
有了手写的JS,如下图,我可以把它导入到我的测试文件中:
define([], function() {
function Bla() { }
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
});
使用类似的 JS,但使用 TypeScript 编译器构建,因此缺少 define([])
包装器,当我将其导入测试时,我只是得到 undefined
。
var Bla = (function () {
function Bla() { }
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
})();
我如何配置 TypeScript 编译器将我编译的 classes 包装在 define()
包装器中,或者我如何配置我的测试以导入 class 而不是包裹在 define()
包装纸中?
你应该使用 "--module amd" 参数
在 visual studio 2015 年:项目/"your project" properties/Typescript Building/module system/amd
下一个:
bla.ts:
function Bla() {
}
Bla.prototype.hi = function () {
return "hey";
};
export = Bla;
bla.js:
define(["require", "exports"], function (require, exports) {
function Bla() {
}
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
});