[英]How to pass externals from webpack to jest?
我有這個 webpack 配置作為我 grunt 構建過程的一部分:
module.exports = {
options: {
output: {
path: path.resolve('../ui/static/js'),
filename: '[name].js',
chunkFilename: '[id].[name].js',
libraryTarget: 'amd',
library: '[name]'
},
externals: [
'jquery',
'lodash',
'backbone',
'backbone.layoutmanager',
'moment',
'spin',
'lib/select2.min',
'dispatcher'
],
resolve: {
root: path.resolve('../ui'),
alias: {
'jst': 'static/jst'
}
}
我們現在正在做出反應,我需要在我的測試文件中導入一些文件,其中包含這些依賴項,但 jest 找不到它們:
Cannot find module 'lib/select2.min' from 'helpers.js'
Cannot find module 'jst/templates_jst' from 'base-view.js
解決此問題的正確方法是什么?
您需要模擬外部庫。
jQuery 示例:
從開玩笑的文檔: https : //facebook.github.io/jest/docs/manual-mocks.html
希望能幫助到你。
這是今天使用webpack@4.11.1
和jest@23.1.0
。 假設這是您的外部 webpack 配置:
externals: {
react: {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react',
},
}
您需要映射每個外部庫以在您的 jest 配置中正確解析,如下所示:
moduleNameMapper: {
"^./react": path.resolve(__dirname, 'node_modules/react'),
}
在調試您的問題時,請務必檢查您構建的組件文件的外觀。 您想確保您看到以下內容:
!function(e,t){if("object"==typeof exports&&"object"==typeof module)
module.exports=t(require("react"));
else if("function"==typeof define&&define.amd)define(["react"],t);
else{var n="object"==typeof exports?t(require("react")):t(e.React);
重要的一點是對 commonjs 和 amd react
React
,對瀏覽器react
React
。
對於我的情況,使用__mocks__
會有點冗長,但我使用了
jest.mock('myModule', () => {/* module impl */}, {virtual: true})
如果__mocks__
建議太冗長,請查看此處的文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.