簡體   English   中英

用es6 + jspm + systemjs + reactJS開玩笑

[英]jest testing with es6 + jspm + systemjs + reactJS

我試圖找出如何在我的reactJS ES6應用程序中進行單元測試。 我的應用程序已經在使用es6模塊系統,並通過jspm / babel轉換為systemJs。

我發現babel-jest作為預處理器,但是即使有了它,我也無法運行測試,因為jest無法找到SystemJ。 (控制台中顯示“未定義系統”錯誤)

如jspm文檔中所述,在瀏覽器中,SystemJs是全局加載的。 我想應該在預處理器中加載SystemJ,但是如何使systemJ可用於加載測試中的其他模塊?

提前致謝

不幸的是,Jest目前不支持SystemJS ES6模塊。

請參閱以下注釋:

因此,聽起來好像開玩笑地假設您的模塊基於節點解析算法進行解析。

不幸的是,這與SystemJS的解析算法不兼容。

如果在jest中有一種方法可以通過API設置“自定義解析器”算法,那么我們可以將jspm插入到jest中,但是我不確定目前是否可行。

-SystemJS創始人Guy Bedford的評論,2015年6月


除非它是社區的貢獻,否則不太可能獲得[SystemJS]的官方支持。

-Jest合作者@cpojer的評論 ,2016年1月


另請參閱以下問題: 在簡單的測試案例中要求使用systemjs時,將拋出無效的URL

從本質上講,要使Jest與運行在JSPM / SystemJS上的應用程序搭配使用,您需要“教”它有關config.js文件中包含的所有映射的信息(或者您調用System.config())

長答案是,您需要為使用JSPM安裝的每個依賴項創建一個條目,如下所示:

//jest configuration 
moduleNameMapper: {     
   ...
   "^redux$": "redux@3.6.0",
   ...
}

對於您擁有的每個別名,您至少需要一個條目:

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 ,也可以在運行Jest之前使用其getJestConfig()方法為您生成配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM