2017-08-30 89 views
0

我正在開發與react-native和typescript的應用程序並使用Jest進行測試,但是當我使用作用域包(@assets)時,我遇到問題,jest無法找到路徑並給出錯誤。與Jest使用範圍包

的目錄結構如下所示:

project/ 
    assets/ 
    img/ 
     foo.png 
    package.json 
    src/ 
    Foo.ts 
    build/ 
    Foo.js 


// assets/package.json 
{ 
    "name": "@assets" // My @assets scope 
} 

// build/Foo.js 
const image = require('@assets/img/foo.png'); // <- error in Jest 

所以,當我運行的笑話:

npm run jest build/

它無法找到 '@資產/ IMG/foo.png',並拋出錯誤:

Cannot find module '@assets/img/logo.png' from 'Foo.js'

如何在Jest中使用範圍包?

玩笑版本:20.0.4

感謝

+0

erm。如果你沒有在'node_modules'和'npm install'ed /'鏈接''中獲得'package.json',它就不會在意子節點。你仍然可以通過webpack別名得到它的工作,請參閱https://webpack.js.org/configuration/resolve/ –

+0

@DimitarChristoff,感謝兄弟,我找到了'moduleNameMapper',我可以放在jest config中。 – Armando

回答

0

僅需定義開玩笑配置的moduleNameMapper

// package.json 
"jest": { 
    "moduleNameMapper": { 
     "^@assets.+\\.(png)$": "<rootDir>/assetsTransformer.js" 
    }, 
} 

// assetsTransformers.js 
const path = require('path'); 

module.exports = { 
    process(src, filename, config, options) { 
    return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';'; 
    }, 
}; 

感謝this comment :-)

+0

當然 - 我做了這個存根真正的所有靜態資產:) https://github.com/DimitarChristoff/jest-static-stubs –

0

對於那些來到這裏這是使用私人包下的組織範圍,這裏是我如何解決這個問題:

"jest": { 
    "moduleNameMapper": { 
    "^@org-name/(.*)$": "<rootDir>/node_modules/@org-name/$1/dist/$1.es5.js" 
    } 
} 

這假定您所有的作用域包都具有與其導出模塊類似的路徑。如果他們不這樣做,您可以單獨指定它們:

"jest": { 
    "moduleNameMapper": { 
    "^@org-name/package-one$": "<rootDir>/node_modules/org-name/package-one/dist/package.js", 
    "^@org-name/package-two$": "<rootDir>/node_modules/org-name/package-two/build/index.js" 
    } 
}