javascript - Jest 无法从 npm 链接模块转换导入

标签 javascript babeljs jestjs lerna

我有一个包含多个模块的项目(使用 Lerna ),我想使用 Jest 来运行测试。但是,当我测试使用共享模块(通过 Lerna 的 npm 链接模块)的代码时,似乎没有正确应用 Babel,并且出现以下错误:

SyntaxError: Unexpected token import

我的项目结构是这样的:

- my-project
|- shared
|- native
|- web

webnative 需要 shared 模块。当我进入 shared 目录并在 Jest 中运行本地测试时,一切正常。如果我在 web 目录中运行 Jest 测试,只要我包含来自 shared 的内容,就会出现上述错误。

这是一个导致错误的 super 简单的测试:

import { util } from 'shared';

it('returns false if not prod', () => {
    expect(util.isProd()).toBe(false);
});

我的 .babelrc 看起来像这样:

{
    "presets": [
        "env",
        "flow",
        "react"
        ],
    "plugins": [
        "flow-react-proptypes",
        "transform-object-rest-spread",
        "transform-class-properties"
    ]
}

我尝试了所有我能找到的东西,包括:

  • 不同的 Babel 配置,包括带有 es2015 预设和为测试环境启用 modules 的配置
  • 为 babel-jest 手动设置 transform 选项
  • 如前所述,Jest 可以在 shared 模块中执行,因此 Jest 和 babel-jest 也安装在那里。

最佳答案

我必须在 web 模块的 package.json 中更改 Jest 的 transformIgnorePatterns 配置选项。

{
    "jest": {
        "transformIgnorePatterns": [
            "<rootDir>/node_modules/(?!shared|another)"
        ]
    },
}

关于javascript - Jest 无法从 npm 链接模块转换导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44413678/

相关文章:

unit-testing - 无法弄清楚如何使用 redux-saga-test-plan 测试 redux-saga 功能

javascript - 如何更改模拟导入的行为?

javascript - Mat-select by formarray 不显示所选值和选项 - 响应式(Reactive)表单 Angular

javascript - 焦点移出时检索父元素 ID

javascript - 单击按钮 'Save' 关闭 Dropzone

angular - 使用 Apache thrift 在 Nativescript + Angular 中“无法读取未定义的属性 'browser'”

javascript - 获取 Ruby Opal 代码中的错误行

node.js - 使用 babel-node 逐步调试 express 服务器

javascript - 为我的脚本的每一行创建一个阴影

module - 在单个 Jest 测试中模拟多个模块