我有一个Typescript + Node + Angular2 + Electron应用程序,目前正在尝试运行节点类测试,也可以在Typescript中编写。
为了构建应用程序并在电子中运行它我使用以下tsconfig:
"compilerOptions": {
"module": "system",
"target": "es6",
...
}
正如您所看到的,它正在使用systemjs并将TS编译为JS-es6。它工作正常,应用程序本身正在工作。
现在我需要Jasmine加入。我安装了这个npm包,更新了我的gulp任务,只为1个文件运行gulp-jasmine:
gulp.task('jasmine', function() {
gulp.src('./test/test.js')
.pipe(jasmine())
});
这就是我的test.js的样子:
System.register(["./models-src/app/models/pathWatch/pathWatch"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var pathWatch_1;
return {
setters:[
function (pathWatch_1_1) {
pathWatch_1 = pathWatch_1_1;
}],
execute: function() {
describe("Run Application:", () => {
it("starts", () => {
var pw1 = new pathWatch_1.PathWatch();
expect(true).toEqual(true);
});
});
}
}
});
所以,没有什么特别的,1 import-1test-1assert,包含SystemJs的东西。 当我尝试运行此测试时,出现错误:“系统未定义”。
我的问题是:
1)是否可以在内部使用systemjs loader运行jasmine测试?
2)如果可能,我是否需要安装/配置一些额外的东西?
3)我尝试使用Module =“commonjs”编译TS并且它正在工作。但我不想为测试和构建编译我的源代码。为什么没有任何额外的操作它与commonjs一起正常工作?
4)我还尝试使用Module =“es6”编译TS。它没有用,我有一个错误“意外的保留字”。是否可以运行用js es6编写的jasmine测试而不将它们转换为es5?
非常感谢!
答案 0 :(得分:1)
1)是否可以在内部使用systemjs loader运行jasmine测试?
2)如果可能,我是否需要安装/配置一些额外的 东西?
你的意思是,使用systemjs作为加载器在节点中运行jasmine测试?我不认为jasmine支持使用systemjs而不是require
来加载模块。因此,您的测试需要在commonjs中,但测试代码可以使用SystemJS来加载和测试应用程序代码。如果systemjs配置正确并且可以找到pathWatch模块,test.js
中的这样的东西可以工作:
describe("Run Application:", () => {
it("starts", (done) => {
var system = require('systemjs');
system.config({
// systemjs config here
//
});
system.import('path-to-path-watch-module').then(pathWatch => {
var pw = new pathWatch.PathWatch();
expect(true).toEqual(true);
done();
});
});
});
system.import是异步的,所以所有的jasmine测试都需要async。
3)我尝试使用Module =" commonjs"来编译TS。它正在发挥作用。但 我不想为测试和构建编译我的源代码。为什么 没有任何额外的操作,它可以和commonjs一起使用吗?
因为在编译的代码中没有对System的引用 - 它像任何其他节点模块一样使用module.exports
,并且可以由jasmine按原样加载。
4)我也尝试使用Module =" es6"来编译TS。它没用,我 有错误"意外的保留字"。是否可以运行 用js es6编写的茉莉花测试没有将它们转换成es5?
Module="es6"
需要一个支持es6 import
和export
的运行时,因此它需要一个转发器和模块加载器才能在当前版本的节点上运行。