测试:
import Web3 from 'web3';
jest.mock('web3', ()=>{
return jest.fn().mockImplementation(()=>'Hello, world!')
});
describe('app', ()=>{
test('mock web3', ()=>{
console.log('web3:', Web3);
let web3 = new Web3(window.ethereum);
console.log("new web3:", web3);
});
});package.json
{
"name": "test",
"dependencies": {
"react-scripts": "5.0.1",
"web3": "^1.7.5"
},
"devDependencies":{
},
"scripts": {
"test": "react-scripts test"
}
}使用npm i && npm test;调用。第一个console.log显示我已经模拟了这个模块。第二个console.log显示出了一些问题。第二个log语句的输出是
新web3: mockConstructor {}
但我希望
new web3:“你好,世界!”
我尝试过许多排列,包括将导入移到jest.mock下面和将导入更改为const Web3 = require('web3');。如果我删除了require或import,测试就会失败,"ReferenceError: Web3未按预期定义“。
我已经复习了其他问题,包括Jest : mock constructor function、Jest mock a constructor和Mock a dependency's constructor Jest,这些问题表明这种方法应该有效。一个显著的区别是,我模拟的是默认导入的构造函数,而不是命名的导入。
如何模拟Web3构造函数以返回模拟对象?
发布于 2022-08-21 00:34:05
由于某些原因,您不能使用这样的jest.fn。似乎是可以的,而且很多文档都建议您可以,所以它可能是一个bug。作为一种解决办法,使用一个常规函数:
jest.mock('web3', ()=>{
return function notJestFn() {return 'Hello, world!';}
});https://stackoverflow.com/questions/73418648
复制相似问题