2016-11-13 44 views
1

我有一個Typescript + Node + Angular2 + Electron應用程序,目前正在嘗試運行測試節點類,也寫在Typescript中。運行在TypeScript中編寫的茉莉花測試

對於構建應用程序和電子中運行它,我使用以下tsconfig:

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

因此,大家可以看到,它使用systemjs和編譯TS到JS-ES6。它工作正常,應用程序本身正在工作。

現在我需要茉莉花來登機。我安裝此NPM包,更新了我一口任務運行一飲而盡,茉莉只是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裝載機?

2)如果可能,我是否需要安裝/配置一些額外的東西?

3)我試着編譯TS使用Module =「commonjs」,它的工作。但我不想爲編譯和測試編譯我的源代碼。爲什麼它沒有任何額外的操作就可以正常使用commonjs?

4)另外我嘗試使用Module =「es6」編譯TS。它不工作,我有一個錯誤「意外的保留字」。是否有可能運行在JS ES6中編寫的茉莉花測試,而無需將它們轉換成ES5?

非常感謝!

+0

請將[so]上的問題限制爲每個問題一個問題。在單個帖子中詢問多個問題會使問題投票更難,以及答案更難。 –

回答

1

1) Is it possible to run jasmine tests, using systemjs loader inside?

2) If it's possible, do I need to install/configure some additional stuff?

你的意思是,在使用systemjs作爲加載程序的節點中運行jasmine測試?我不認爲茉莉花支持使用systemjs而不是require來加載模塊。所以你的測試需要使用commonjs,但測試代碼可以使用SystemJS來加載和測試應用程序代碼。像這樣的事情在test.js可以工作,前提是systemjs配置正確,可以找到pathWatch模塊:

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是異步的,因此所有茉莉測試需要async了。

3) I tried to compile TS using Module="commonjs" and it's working. But I don't want to compile my source differently for tests and build. Why it's working fine with commonjs without any additional manipulations?

因爲再有就是在已編譯代碼到系統沒有參考 - 它使用module.exports像任何其他節點模塊,並且可以被加載爲是茉莉。

4) Also I tried to compile TS using Module="es6". It's not working, I have an error "Unexpected reserved word". Is it possible to run jasmine tests written in js es6 without transpiling them into es5?

Module="es6"需要支持ES6 importexport運行時,所以它需要一個transpiler和模塊加載器纔可以在節點的當前版本上運行。