使用最新版本的 d3-path 配置 jest
Configure jest with latest version of d3-path
出于某种原因,我的 jest 配置不适用于最新版本的 d3-path@3.0.1
。它在版本 2.0.0
上运行良好。我猜这与 d3-path
切换到 ESM 有关,但我已经在自己的代码中使用 ES6,所以我不明白为什么它突然不再起作用了。我安装了以下软件包:
"dependencies": {
"d3-path": "^3.0.1"
},
"devDependencies": {
"@babel/core": "^7.15.8",
"@babel/preset-env": "^7.15.8",
"babel-jest": "^27.3.1",
"jest": "^27.3.1"
}
我的babel.config.js
:
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
我的index.js
:
import { path } from 'd3-path'
export default () => path()
测试文件:
import fn from '../src/index.js'
describe('test', () => {
it('works', () => {
fn()
expect(2 + 2).toBe(4)
})
})
错误信息:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){export {default as path} from "./path.js";
^^^^^^
SyntaxError: Unexpected token 'export'
> 1 | import { path } from 'd3-path'
重现:
git clone https://github.com/luucvanderzee/jest-problem.git
cd jest-problem
npm i
npm run test
// The test runs without failure- this is because we're currently still using d3-path@2.0.0
npm uninstall d3-path && npm install d3-path // (upgrade to d3-path@3.0.1)
npm run test
// Now the test fails.
我应该如何配置 jest and/or babel 来解决这个问题?
编辑:
我已经尝试了以下方法(来自 jest 文档的 this 页):
- 正在使用以下内容创建
jest.config.js
文件:
module.exports = {
transform: {}
}
- 将我的
"test"
命令从 "jest"
更改为 "node --experimental-vm-modules node_modules/jest/bin/jest.js"
这给了我另一个错误:
/home/luuc/Projects/javascript/jest-problem/test/test.test.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import fn from '../src/index.js'
^^^^^^
SyntaxError: Cannot use import statement outside a module
我也不明白
是什么意思
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
不就是模块没有改造的问题吗?添加忽略模式不仅会导致模块 not 发生转换吗?
问题
这个错误是因为jest
没有发送node_modules
的内容,默认被babel转换
npm run test
的以下输出行表示解决问题的一种方法:
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
解决方案
应该更新 jest
的配置,以指示它转换 d3-path
依赖项中存在的 ESM
代码。
为此,将以下内容添加到项目根目录中的 jest.config.js
文件中:
module.exports = {
transformIgnorePatterns: ['node_modules/(?!(d3-path)/)']
}
npm run test
之后运行正常。
transformIgnorePatterns
选项是documented here。
编辑 - 包括更多模块
为了包含所有以d3
开头的模块,可以使用以下语法:
transformIgnorePatterns: ['/node_modules/(?!(d3.*)/)']
出于某种原因,我的 jest 配置不适用于最新版本的 d3-path@3.0.1
。它在版本 2.0.0
上运行良好。我猜这与 d3-path
切换到 ESM 有关,但我已经在自己的代码中使用 ES6,所以我不明白为什么它突然不再起作用了。我安装了以下软件包:
"dependencies": {
"d3-path": "^3.0.1"
},
"devDependencies": {
"@babel/core": "^7.15.8",
"@babel/preset-env": "^7.15.8",
"babel-jest": "^27.3.1",
"jest": "^27.3.1"
}
我的babel.config.js
:
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
我的index.js
:
import { path } from 'd3-path'
export default () => path()
测试文件:
import fn from '../src/index.js'
describe('test', () => {
it('works', () => {
fn()
expect(2 + 2).toBe(4)
})
})
错误信息:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){export {default as path} from "./path.js";
^^^^^^
SyntaxError: Unexpected token 'export'
> 1 | import { path } from 'd3-path'
重现:
git clone https://github.com/luucvanderzee/jest-problem.git
cd jest-problem
npm i
npm run test
// The test runs without failure- this is because we're currently still using d3-path@2.0.0
npm uninstall d3-path && npm install d3-path // (upgrade to d3-path@3.0.1)
npm run test
// Now the test fails.
我应该如何配置 jest and/or babel 来解决这个问题?
编辑:
我已经尝试了以下方法(来自 jest 文档的 this 页):
- 正在使用以下内容创建
jest.config.js
文件:
module.exports = {
transform: {}
}
- 将我的
"test"
命令从"jest"
更改为"node --experimental-vm-modules node_modules/jest/bin/jest.js"
这给了我另一个错误:
/home/luuc/Projects/javascript/jest-problem/test/test.test.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import fn from '../src/index.js'
^^^^^^
SyntaxError: Cannot use import statement outside a module
我也不明白
是什么意思 • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
不就是模块没有改造的问题吗?添加忽略模式不仅会导致模块 not 发生转换吗?
问题
这个错误是因为jest
没有发送node_modules
的内容,默认被babel转换
npm run test
的以下输出行表示解决问题的一种方法:
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
解决方案
应该更新 jest
的配置,以指示它转换 d3-path
依赖项中存在的 ESM
代码。
为此,将以下内容添加到项目根目录中的 jest.config.js
文件中:
module.exports = {
transformIgnorePatterns: ['node_modules/(?!(d3-path)/)']
}
npm run test
之后运行正常。
transformIgnorePatterns
选项是documented here。
编辑 - 包括更多模块
为了包含所有以d3
开头的模块,可以使用以下语法:
transformIgnorePatterns: ['/node_modules/(?!(d3.*)/)']