使用带有Jest的范围包

时间:2017-08-30 13:13:53

标签: reactjs typescript scope package jest

我正在使用react-native和typescript开发一个应用程序,并使用Jest进行测试,但是当我使用作用域包(@assets)时,我遇到了问题,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 /

找不到'@ assets / img / foo.png'并抛出错误:

  

无法从'Foo.js'找到模块'@ assets / img / logo.png'

如何在Jest中使用范围包?

Jest版本:20.0.4

感谢

2 个答案:

答案 0 :(得分:4)

对于那些在一个范围内的组织下使用私有包的人来说,我在这里解决了这个问题:

"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"
  }
}

答案 1 :(得分:0)

Necessary only define the .bash_profile in jest config:

$ ws /some/project/directory

Thanks for this comment :-)