Jest设置“SyntaxError:意外的令牌导出”

时间:2017-02-15 21:16:26

标签: reactjs redux jestjs

我正在对目前没有测试的现有项目进行测试。我的测试无法编译ngOnChanges(): void { if (this.candidat) { for (let agence of this.agences) { if (this.candidat.agence.nom == agence.nom) { this.candidat.agence = agence; } } } 个导入。

node_modules/

我发现的解决方法是将package.json jest配置中的/Users/me/myproject/node_modules/lodash-es/lodash.js:10 export { default as add } from './add.js'; ^^^^^^ SyntaxError: Unexpected token export at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12) at Object.<anonymous> (app/reducers/kind_reducer.js:2:43) at Object.<anonymous> (app/reducers/index.js:12:47) 列入白名单:

node_modules

这似乎是一种黑客攻击,因为运行导入"jest": { "transformIgnorePatterns": [ "!node_modules/" ] } 的简单测试需要1分钟以上。

感谢任何帮助或指示,谢谢!

5 个答案:

答案 0 :(得分:27)

我必须将其添加到我的.jestconfig

"transformIgnorePatterns": [
  "<rootDir>/node_modules/(?!lodash-es)"
]

答案 1 :(得分:13)

在此处发布更完整的答案:

默认情况下,Jest不会转换node_modules,因为node_modules很大。大多数节点模块都被打包以暴露ES5代码,因为它可以在没有任何进一步转换的情况下运行(并且在很大程度上向后兼容)。

在你的情况下,lodash-es专门公开ES模块,这需要由Jest通过babel构建。

您可以尝试缩小白名单,以便Jest不会尝试通过babel传递node_modules中的每个javascript文件。

我认为您的案例中的正确配置是:

"jest": {
  "transformIgnorePatterns": [
    "/!node_modules\\/lodash-es/"
  ]
}

答案 2 :(得分:10)

如果上述解决方案都不适合您,则可以开玩笑地尝试

"moduleNameMapper": {
    "^lodash-es$": "lodash"
}

在测试运行时它将用commonjs版本替换lodash-es

答案 3 :(得分:1)

对于.merge个正在寻找修复程序的用户,这对我有用:

merged = parent.merge(child, on='Cust_id', how='outer', indicator=True)

# display(merged)
  Name  Cust_id    order        date  Payment Description   Detail     _merge
0  xyz        1      ice  01-02-2019   online        Good  Regular       both
1  ert        1      egg  01-02-2019   online        Good  Regular       both
2  abc       45    bread  01-02-2019  offline        Bulk    Buyer       both
3  mno       56   Butter  01-02-2019  offline         NaN      NaN  left_only
4  pqr       67  cookies  01-02-2019   online         NaN      NaN  left_only
5  rst       34     Rice  01-02-2019   online   Excellent   Normal       both

create-react-app文件中的替代选项对我不起作用。请记住,并非每个选项都可以被覆盖,这是受支持的选项的列表:https://create-react-app.dev/docs/running-tests#configuration

答案 4 :(得分:0)

将 .babelrc 重命名为 babel.config.js 并添加 transformIgnorePatterns 对我有用。

module.exports = {
  "presets": ["@babel/preset-env"]
}

附言我的笑话版本是: "jest": "24.9.0"

https://github.com/facebook/jest/issues/6229#issuecomment-419885857