Reactjs 无法使用JEST(带Typescript)和React环境模拟节点模块
我制作了一个反应钩子库,可以在NPM上使用 对于这个库的单元测试,我使用JEST和Typescript 它与另一个节点模块Reactjs 无法使用JEST(带Typescript)和React环境模拟节点模块,reactjs,typescript,mocking,jestjs,ts-jest,Reactjs,Typescript,Mocking,Jestjs,Ts Jest,我制作了一个反应钩子库,可以在NPM上使用 对于这个库的单元测试,我使用JEST和Typescript 它与另一个节点模块@brand/dependencyModule有依赖关系 这个@brand/dependencModule正在执行http请求并从“events”发出我需要模拟的事件(带有{EventEmitter}) 我试着按照这个库的todo手动模拟 首先,让我向您展示我的尝试: 在项目根级别创建\uuuuuu mocks\uuuuu文件夹(与节点模块的级别相同) 在\uuuu mock
@brand/dependencyModule
有依赖关系
这个@brand/dependencModule
正在执行http请求并从“events”发出我需要模拟的事件(带有{EventEmitter})
我试着按照这个库的todo手动模拟
首先,让我向您展示我的尝试:
在项目根级别创建\uuuuuu mocks\uuuuu
文件夹(与节点模块的级别相同)
在\uuuu mocks\uuuu
在@brand
文件夹中创建TS文件dependencModule.TS
在\uuuu mocks\uuuu/@brand/dependencyModule.ts
中,我们有:
“严格使用”;
从“事件”导入{EventEmitter};
进口{
打字
}来自“@brand/dependencyModule”;
类MockVisitor扩展了EventEmitter{
someAttribute1:字符串;
someAttribute2:字符串;
someAttribute3:SomeTyping;
建造师(部分){
超级();
this.someAttribute1=some;
this.someAttribute2=参数;
this.someAttribute3=mockHttpResponse;
设置超时(()=>{
这个.emit('ready');
}, 100);
}
}
类模拟模块{
其他属性1:字符串;
构造函数(其他参数){
this.otherAttribute1=otherParam;
}
公共新访客(部分,参数){
返回新的MockVisitor(部分,参数);
}
}
导出默认jest.fn().mockImplementation(()=>({
开始:(something)=>{
返回新的MockModule(something);
}
}));
现在,在我的src/**/index.test.ts
文件中,我有:
描述('试图模仿@brand/dependencModule',()=>{
test('它应该使用模拟版本',async()=>{
设isReady=null;
常量{container}=render(
{
isReady=真;
}}
>
你好
);
等待等待(()=>{
如果(!isReady){
抛出新错误(“未准备就绪”);
}
});
期望(isReady)。toEqual(true);
});
});
最后,让我们看看使用“@brand/dependencyModule”的MyHookProvider.tsx
文件:
import-React,{useState,useffect,SetStateAction,Dispatch,useContext}从'React'导入;
从“@brand/dependencyModule”导入dependencyModule;
导出常量MyHookProvider:React.SFC=({
// ...
奥尼通,
}:ProviderProps)=>{
useffect(()=>{
const module=dependencModule.start('hello');
const visitorestance=module.newVisitor('stack','overflow');
visitorestance.on('ready',()=>{
奥尼酮()
});
}, [/*...*/]);
返回(
{“我准备好了。”}
);
};
MyHookProvider.defaultProps={
ONINITONE:():无效=>{
//无所事事
},
};
现在我在运行npm run test
时遇到的错误,我希望jest能够检测到我模拟了@brand/dependencModule
,但当我调试时,它实际上运行的是真正的库。我不知道我错过了什么才能让它发挥作用
有什么帮助吗?谢谢大家!
下面是我用于单元测试的LIB:
"@testing-library/jest-dom": "^5.5.0",
"@types/jest": "^25.2.1",
"@types/enzyme": "^3.10.5",
"@types/enzyme-adapter-react-16": "^1.0.6",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.2",
"enzyme-to-json": "^3.4.4",
"jest": "^25.4.0",
"jest-mock-axios": "^3.2.0",
"ts-jest": "^25.4.0",
jest配置设置如下:
"jest": {
"setupFilesAfterEnv": [
"./src/setupTests.js"
]
}
使用src/setupTests.js
:
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });