我在使用扩展SyntaxError: Unexpected token import
的自定义类时收到NodeEnvironment
。不使用自定义测试环境时,现代JavaScript - ES模块等工作正常。
我正在使用节点8.11.1
和纱线1.6.0
。
这是完整的错误:
$ jest --no-cache
FAIL __tests__/math.js
● Test suite failed to run
/home/user/workspace/web/jest-custom-environment-no-import/__tests__/_helpers_/environments/integration.js:1
(function (exports, require, module, __filename, __dirname) { import NodeEnvironment from 'jest-environment-node';
^^^^^^
SyntaxError: Unexpected token import
at node_modules/jest-runner/build/run_test.js:31:29
这是我的.babelrc
:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
},
"shippedProposals": true
}
]
]
}
jest
的{{1}}部分:
package.json
自定义环境:
"jest": {
"testEnvironment": "./__tests__/_helpers_/environments/integration.js",
"testPathIgnorePatterns": ["/node_modules/", "/_helpers_/"],
"verbose": true
}
我还创建了一个GitHub repo来演示此问题。
答案 0 :(得分:2)
我使用esm创建了一个明智的解决方法。我创建了一个加载esm的附加文件,它加载了我自定义的Jest环境。
我的package.json
现在包含:
"jest": {
"testEnvironment": "./__tests__/_helpers_/environments/integration.index.js",
"testPathIgnorePatterns": ["/node_modules/", "/_helpers_/"],
"verbose": true
}
文件./__tests__/_helpers_/environments/integration.index.js
包含:
// eslint-disable-next-line no-global-assign
require = require('esm')(module);
module.exports = require('./integration').default;
./__tests__/_helpers_/environments/integration.js
保持不变。
在原始回购邮件的esm branch中找到了一个工作示例。