运行用TypeScript编写的Jasminetesting

我有一个TypeScript + Node + Angular2 + Electron应用程序,目前正在尝试运行节点类的testing,也写在Typescript中。

为了构build应用程序并在电子内运行,我使用下面的tsconfig:

"compilerOptions": { "module": "system", "target": "es6", ... } 

正如你所看到的,它使用了systemjs并将TS编译成JS-es6。 它工作正常,应用程序本身正在工作。

现在我需要茉莉花来join 我安装了这个npm包,更新了我的gulp任务,运行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-1声明,用SystemJs的东西包装。 当我尝试运行此testing时,出现错误:“系统未定义”。

我的问题是:

1)是否有可能运行茉莉花testing,使用systemjs loader在里面?

2)如果可能的话,我是否需要安装/configuration一些额外的东西?

3)我试图编译TS使用Module =“commonjs”,它的工作。 但是我不想为了testing和构build而编译我的源代码。 为什么没有任何额外的操作,它与commonjs正常工作?

4)我也尝试使用Module =“es6”来编译TS。 这不工作,我有一个错误“意外的保留字”。 是否有可能运行js6testing写在JS ES6没有转译成ES5?

非常感谢!

1)是否有可能运行茉莉花testing,使用systemjs loader在里面?

2)如果可能的话,我是否需要安装/configuration一些额外的东西?

你的意思是,使用systemjs作为加载程序在节点中运行jasminetesting? 我不认为茉莉花支持使用systemjs而不是加载模块的require 。 所以你的testing需要使用commonjs,但是testing代码可以使用SystemJS来加载和testing应用程序代码。 像test.js东西可以工作,只要systemjsconfiguration正确,可以findpathWatch模块:

 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是asynchronous的,所以所有的茉莉花testing都需要是asynchronous的 。

3)我试图编译TS使用Module =“commonjs”,它的工作。 但是我不想为了testing和构build而编译我的源代码。 为什么它没有任何额外的操作与commonjs正常工作?

因为那么在编译的代码中就没有引用module.exports它像其他任何节点模块一样使用module.exports并且可以像jasmine那样加载。

4)我也尝试使用Module =“es6”来编译TS。 这不工作,我有一个错误“意外的保留字”。 是否有可能运行js6testing写在JS ES6没有转译成ES5?

Module="es6"需要一个支持es6 importexport的运行时,所以它需要一个转换器和模块加载器才能在当前版本的节点上运行。