Javascript 运行用TypeScript编写的Jasmine测试

Javascript 运行用TypeScript编写的Jasmine测试,javascript,node.js,typescript,jasmine,systemjs,Javascript,Node.js,Typescript,Jasmine,Systemjs,我有一个Typescript+Node+Angular2+Electron应用程序,目前正在尝试为节点类运行测试,也是用Typescript编写的 为了构建应用程序并在electron中运行它,我使用以下tsconfig: "compilerOptions": { "module": "system", "target": "es6", ... } 如您所见,它使用systemjs并将TS编译成JS-es6。它工作正常,应用程序本身也在工作 现在我需要茉莉花加入。我

我有一个Typescript+Node+Angular2+Electron应用程序,目前正在尝试为节点类运行测试,也是用Typescript编写的

为了构建应用程序并在electron中运行它,我使用以下tsconfig:

"compilerOptions": {
    "module": "system",
    "target": "es6",
    ...
  }
如您所见,它使用systemjs并将TS编译成JS-es6。它工作正常,应用程序本身也在工作

现在我需要茉莉花加入。我安装了这个npm包,更新了我的gulp任务以运行gulp jasmine,只需1个文件:

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加载程序运行jasmine测试吗

2) 如果可能的话,我需要安装/配置一些额外的东西吗

3) 我试着使用Module=“commonjs”编译TS,它正在工作。但是我不想为了测试和构建而对源代码进行不同的编译。为什么它可以在没有任何额外操作的情况下使用commonjs

4) 我还尝试使用Module=“es6”编译TS。它不工作,我有一个错误“意外保留字”。是否可以运行JSES6编写的jasmine测试,而不将它们传输到es5中

非常感谢

1) 可以在内部使用systemjs加载程序运行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();
        });
    });
});
导入是异步的,所以所有jasmine测试也需要异步

3) 我试着使用Module=“commonjs”编译TS,它正在工作。但是 我不想为测试和构建以不同的方式编译源代码。为什么? 在没有任何额外操作的情况下,commonjs可以正常工作吗

因为在编译的代码中没有对系统的引用-它使用
模块。像任何其他节点模块一样导出
,并且可以由jasmine按原样加载

4) 我还尝试使用Module=“es6”编译TS。我觉得这不管用 出现错误“意外保留字”。能跑吗 jasmine测试是用JSES6编写的,没有将它们转换成es5吗

Module=“es6”
需要一个支持es6
导入和
导出的运行时,因此它需要一个transpiler和模块加载器,才能在当前版本的节点上运行。

请将问题限制为每个问题一个问题。在一篇帖子中问多个问题会让你很难对问题和答案进行投票。