提问人:lmat - Reinstate Monica 提问时间:8/17/2022 更新时间:8/18/2022 访问量:638
Jest 模块模拟与 ECMAScript 模块
Jest Module Mock with ECMAScript Modules
问:
以文档(https://jestjs.io/docs/ecmascript-modules)为指导,我写了以下内容:
package.json
:
{
"scripts": {
"watch-test": "jest ./test --verbose --watch"
},
"dependencies": {
"ethers": "^5.6.9"
},
"devDependencies": {
"jest": "^28.1.3"
},
"jest": {
"verbose": true,
"transform": {}
},
"type": "module"
}
test/test.js
:
import {jest} from '@jest/globals';
import {ethers} from 'ethers';
jest.mock('ethers', () => ({ethers: 'Hello, world!'}));
console.log(ethers);
使用以下命令执行测试:。输出是等等,但我希望它说类似.npm i && NODE_OPTIONS=--experimental-vm-modules npm run watch-test;
console.log {Signer: [Getter],Wallet: [Getter],...
console.log "Hello, world!"
看起来模块(或模块中的对象?)根本没有被嘲笑。我尝试将呼叫移到上方(由于开玩笑,这不应该是必需的),但这无济于事。ethers
ethers
jest.mock
import
在使用 ECMAScript 模块配置时,如何使用 jest 模拟模块?ethers
答:
1赞
lmat - Reinstate Monica
8/18/2022
#1
虽然吊装是在普通的 JS 中完成的,但它不是使用 ECMAScript 模块完成的,所以你必须在模拟后使用动态导入来导入它们,而不是模拟模块。import
test/test.js
:
import {jest} from '@jest/globals';
jest.mock('ethers', () => ({ethers: 'Hello, world!'}));
const {ethers} = await import('ethers');
test('do it', ()=> {
expect(ethers).toEqual("Hello, world!");
});
package.json
:
{
"scripts": {
"watch-test": "jest ./test --verbose --watch"
},
"dependencies": {
"ethers": "^5.6.9"
},
"devDependencies": {
"jest": "^28.1.3"
},
"jest": {
"verbose": true,
"testMatch": [
"<rootDir>/test/**/*.?(c)js"
],
"transform" : {}
},
"type": "module"
}
("testMatch": "test/**"
不起作用,您必须以 OR 为前缀;我不知道为什么。<rootDir>
**
并按照问题中的说明调用。
这次谈话让我走上了正确的轨道:https://github.com/facebook/jest/issues/13135
评论