开玩笑的 transformIgnorePatterns 不起作用

Posted

技术标签:

【中文标题】开玩笑的 transformIgnorePatterns 不起作用【英文标题】:Jest transformIgnorePatterns not working 【发布时间】:2018-10-13 08:19:34 【问题描述】:

我花了很长时间查看有关此的其他问题并查看 Github 上的其他项目,但似乎没有一个答案对我有用。

我在我的项目中加载第三方库,运行 Jest 测试时出现错误

export default portalCommunication;
^^^^^^

SyntaxError: Unexpected token export

> 1 | import portalCommunication from 'mathletics-portal-communication-service';

我已尝试以多种方式更新我的 Jest 配置以使其转译此库,但我总是遇到相同的错误。

这是我当前的 jest.config.js 文件:

module.exports = 
    moduleNameMapper: 
        '\\.(css|scss)$': 'identity-obj-proxy',
        '\\.svg$': '<rootDir>/test/mocks/svg-mock.js'
    ,
    setupFiles: ['./test/test-setup.js'],
    transformIgnorePatterns: [
        '<rootDir>/node_modules/(?!mathletics-portal-communication-service)'
    ]
;

我还尝试添加转换属性以针对这个 mathletics-portal-communication-service 目录运行 babel-jest。

请帮忙!

【问题讨论】:

你可能需要配置 babel。 我的项目设置了 babel 并且工作正常,我需要为 Jest 做些什么特别的事情吗?我以为它会自动使用 babel-jest? 【参考方案1】:

在我将 .babelrc 更改为 babel.config.js 之前,transformIgnorePatterns 对我不起作用,如下所示:

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

在此评论中看到:https://github.com/facebook/jest/issues/6229#issuecomment-403539460

【讨论】:

您知道.babelrcbabel.config.js 文件是否绝对必要?我正试图让我的 transformIgnorePatterns 在我的 package.json 声明中工作 看链接的github问题,好像在package.json里也行不通,不过我没试过。 这个回复被低估了!!在我看到这个之前,我已经撞了几个小时了!哎呀,这应该在文档中! 奇怪的是 .babelrc 不起作用,而 babel.config,js 起作用。 谢谢你,你节省了我的时间!【参考方案2】:

目前,作为一种解决方法,我已将配置更改为使用moduleNameMapper 选项来为该库加载模拟类。我更愿意使用transformIgnorePatterns,所以仍然会感谢任何想法。

新配置:

module.exports = 
    moduleNameMapper: 
        '\\.(css|scss)$': 'identity-obj-proxy',
        '\\.svg$': '<rootDir>/test/mocks/svg-mock.js',
        'mathletics-portal-communication-service': '<rootDir>/test/mocks/mathletics-portal-communication-service-mock.js'
    ,
    setupFiles: ['./test/test-setup.js']
;

【讨论】:

【参考方案3】:

添加斜杠可以帮我解决这个问题:


    // ...
    transformIgnorePatterns: [
        '<rootDir>/node_modules/(?!mathletics-portal-communication-service/)'
    ]
;

【讨论】:

【参考方案4】:

我组织的另一个团队添加了一些通用模块。这没有被转译,所以问题。

我关注了这个:https://babeljs.io/docs/en/configuration#whats-your-use-case

    将我的.babelrc 转换为babel.config.json 在开玩笑的配置中添加了这个: transformIgnorePatterns: ['/node_modules/(?!(@companyName)/).*/'],

这解决了我的问题。

【讨论】:

【参考方案5】:

可能是您使用了rootDir。试试:

    "transformIgnorePatterns": [
      "node_modules/(?!(mathletics-portal-communication-service))"
    ]

【讨论】:

以上是关于开玩笑的 transformIgnorePatterns 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

开玩笑测试中 UnhandledPromiseRejectionWarning 的含义是啥?

流星反应开玩笑测试

createWriteStream 的 ('error') 上的开玩笑单元测试

Dispatcher 没有在开玩笑的单元测试中注册回调

Gitlab - 开玩笑测试 - 分段错误(核心转储)

开玩笑:无法读取未定义的属性(读取“0”)