首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jest模拟默认构造器

Jest模拟默认构造器
EN

Stack Overflow用户
提问于 2022-08-19 14:55:30
回答 1查看 216关注 0票数 0

测试:

代码语言:javascript
复制
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

代码语言:javascript
复制
{
    "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');。如果我删除了requireimport,测试就会失败,"ReferenceError: Web3未按预期定义“。

我已经复习了其他问题,包括Jest : mock constructor functionJest mock a constructorMock a dependency's constructor Jest,这些问题表明这种方法应该有效。一个显著的区别是,我模拟的是默认导入的构造函数,而不是命名的导入。

如何模拟Web3构造函数以返回模拟对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-21 00:34:05

由于某些原因,您不能使用这样的jest.fn。似乎是可以的,而且很多文档都建议您可以,所以它可能是一个bug。作为一种解决办法,使用一个常规函数:

代码语言:javascript
复制
jest.mock('web3', ()=>{
    return function notJestFn() {return 'Hello, world!';}
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73418648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档