运行用TypeScript编写的Jasmine测试

时间:2016-11-13 16:01:04

标签: javascript node.js typescript jasmine systemjs

我有一个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?

非常感谢!

1 个答案:

答案 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 importexport的运行时,因此它需要一个转发器和模块加载器才能在当前版本的节点上运行。