javascript - Jest 和 ES6 语法的问题
问题描述
我有两个测试文件都使用import
. 其中一个通过,另一个抛出错误:
node_modules/@storybook/addon-docs/blocks.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import deprecate from 'util-deprecate';
^^^^^^
SyntaxError: Cannot use import statement outside a module
> 1 | import { DocsPage, DocsContainer } from '@storybook/addon-docs/blocks';
我的 Jest 配置如下:
module.exports = {
collectCoverageFrom: ['**/*.{js,jsx,ts,tsx}', '!**/*.d.ts', '!**/node_modules/**'],
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: -10,
},
},
moduleNameMapper: {
'^@app/(.*)$': '<rootDir>/$1',
'^@components/(.*)$': '<rootDir>/components/$1',
'^@graphql/(.*)$': '<rootDir>/graphql/$1',
'^@lib/(.*)$': '<rootDir>/lib/$1',
},
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
testPathIgnorePatterns: [
'<rootDir>/node_modules/',
],
transform: {
'^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { presets: ['next/babel'] }],
},
transformIgnorePatterns: ['/node_modules/'],
};
我对一个文件可以正常运行而另一个文件不能正常运行感到完全困惑。如果有人能指出我正确的方向,那将不胜感激。
解决方案
Jest 27.xx 的实施变得更加严格。
当我使用 markdown npm 包时,我遇到了类似的情况。
尝试改变:
transformIgnorePatterns: ['/node_modules/'],
至:
transformIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/node_modules/util-deprecate'],
Jest 在他们的网站上有这个,他们解释了这个问题是如何出现的。
以下是逐字复制问题的解释,其中突出显示了重要部分:
有时会发生(尤其是在 React Native 或 TypeScript 项目中)第 3 方模块发布为untranspiled。由于默认情况下 node_modules 中的所有文件都没有进行转换,因此Jest 将无法理解这些模块中的代码,从而导致语法错误。为了克服这个问题,您可以使用
transformIgnorePatterns
允许转译此类模块。
推荐阅读
- mysql - MySQL 获取与其他记录有时间差的记录
- jquery - Laravel / Vuejs 链接共享
- listview - Oracle jet :: 在排序/过滤时在列表视图项(模型)中保留按钮设置状态
- javascript - 使用 await 和 async 承诺作用域
- javascript - 模块显示模式的参考错误
- python - 将 json 补丁应用到 Mongoengine 文档
- hsm - 使用 PKCS11 设置 Docker
- python - 如何使用 Group By 和 Join 访问对象 User (django admin)?
- asp.net - ASP.Net 随机会话超时
- c# - Azure WebJobs SDK 和模拟器 - 触发器不起作用