2015-10-05 68 views
0

進行笑話測試我想弄清楚如何在我的respondJS ES6應用程序中進行單元測試。我的應用程序已經使用es6模塊系統,使用jspm/babel將其轉換爲systemJs。使用es6 + jspm + systemjs + reactJS

我發現babel-jest作爲預處理器,但即使有它,我也無法運行我的測試,因爲jest無法找到SystemJs。 (「系統沒有定義」在控制檯示出誤差)

在瀏覽器中,如JSPM文檔中說明的那樣,SystemJs全局加載。我想我應該在我的預處理器中加載SystemJs,但是如何讓我的測試中加載額外的模塊可以使用systemJs?

在此先感謝

+0

PS。我試圖理解如何使它工作,所以如果我在做錯錯誤,請告訴我什麼! – nemenos

+0

你有沒有找到解決方案? – user5325596

+0

我不再使用笑話了。轉換到簡單的茉莉花。有了Jasmine,karma,jspm karma插件,我可以運行單元測試,但是當我想要模擬依賴關係時仍然存在一些麻煩,但是我認爲我應該多學習一下systemjs,並且當我有時間時,我應該設法做到這一點。 .. – nemenos

回答

0

不幸的是,玩笑並沒有在此刻支持SystemJS ES6模塊。

請參見下面的註釋:

所以,它聽起來像笑話假設基於節點解析算法的模塊解決。

不幸的是,這與SystemJS的分辨率算法不兼容。

如果有人通過API設置「自定義解析器」算法,那麼我們可以將jspm插入開玩笑,但我不確定這是否可行。

- Comment by Guy Bedford,SystemJS的創造者,2015年6月


這是不可能這樣會有[SystemJS],除非它是一個社區貢獻的官方支持。

- Comment by @cpojer,玩笑合作者,2016年1月


也看到了以下問題:Invalid URL is thrown when requiring systemjs in jest test cases

+0

是的 - cpojer評論說你和我聯繫實際上是他和我之間的一個快速交流的一部分,我試圖讓Jest和jspm工作。我認爲隨着jspm/systemjs採用速度的加快,我們將在未來六個月內看到解決方案。 –

+0

啊我現在看到了,謝謝@ShawnErquhart。讓我們希望你是對的!六個月你的直覺還是我錯過了一些信息? –

+0

純腸。也許更好的方法來描述它:如果沒有標準,夏季時可用的基本jspm/Jest設置,我會感到驚訝。 –

0
本質

獲得玩笑發揮好與JSPM/SystemJS您運行的應用程序需要「教」它關於它保存在config.js文件中的所有映射(或者你調用System。配置())

長的答覆是,你需要爲你已經安裝了JSPM這樣每個相關的條目:

//jest configuration 
moduleNameMapper: {  
    ... 
    "^redux$": "[email protected]", 
    ... 
} 

你有每個別名,你至少需要一個項:

moduleNameMapper: {  
     ... 
     "^common\\/(.*)": "<rootDir>/src/common/$1", //for a dir alias 
     "^actions$": "<rootDir>/src/actions/index", //for a file alias 
     ... 
} 

你還需要在你的nodeNameMapper有這些映射:

moduleNameMapper: {  
    ... 
     "^npm:(.*)": "<rootDir>/jspm_packages/npm/$1", 
      "^github:(.*)": "<rootDir>/jspm_packages/github/$1", 
    ... 
} 

最後,你需要有這個moduleDirectories配置:

moduleDirectories: ["node_modules", "jspm_packages/npm", "jspm_packages/github"] 

這個心不是真的實用,因爲你不想讓你的所有依賴註冊表的兩個副本,並有當他們改變它們同步...

所以更好答案,你用我的gulp-jest-jspm插件:)

即使你不使用gulp,你也可以使用它的getJestConfig()方法在你運行Jest之前爲你生成配置。附件號碼:

相關問題