Javascript 如何嘲笑它
关于如何在it测试中模拟const,有无数个问题,但没有一个可行 是否有人能提供工作解决方案,如何模拟Javascript 如何嘲笑它,javascript,node.js,unit-testing,mocking,jestjs,Javascript,Node.js,Unit Testing,Mocking,Jestjs,关于如何在it测试中模拟const,有无数个问题,但没有一个可行 是否有人能提供工作解决方案,如何模拟从“detect node”导入isNode用于it?() 我的代码不起作用。它不是模仿isNode`总是正确的 例如: 测试文件: import { myTestFn } from './fn' describe(('TEST'), () => { it(('node mock false'), () => { jest.doMock('detect-n
从“detect node”导入isNode代码>用于it
?()
我的代码不起作用。它不是模仿
isNode`总是正确的
例如:
测试文件:
import { myTestFn } from './fn'
describe(('TEST'), () => {
it(('node mock false'), () => {
jest.doMock('detect-node', () => false);
myTestFn(); // will print constant
});
it(('node mock true'), async () => {
jest.doMock('detect-node', () => true);
myTestFn(); // will print constant
});
});
Fn文件:
import isNode from 'detect-node';
export const myTestFn = () => console.log({isNode})
例外输出为:
false (for 'node mock false')
true (for 'node mock true')
我尝试了很多方法,使用doMock、mock、mock-in-test、mock-out-test
我使用的是“玩笑”:“^26.4.2”
非常感谢你的帮助 您应该在模拟后使用和动态导入('./fn')
重置模块注册表-所有必需模块的缓存。这对于隔离本地状态可能在测试之间发生冲突的模块非常有用
例如
fn.ts
:
从“检测节点”导入isNode;
export const myTestFn=()=>console.log({isNode});
fn.test.ts
:
description('63811749',()=>{
在每个之前(()=>{
jest.reset模块();
});
它('node mock false',async()=>{
doMock('detect-node',()=>false);
const{myTestFn}=等待导入('./fn');
myTestFn();
});
它('node mock true',async()=>{
doMock('detect-node',()=>true);
const{myTestFn}=等待导入('./fn');
myTestFn();
});
});
单元测试结果:
通过src/stackoverflow/63811749/fn.test.ts
63811749
✓ 节点模拟错误(13ms)
✓ 节点模拟真实(2ms)
console.log src/stackoverflow/63811749/fn.ts:3
{isNode:false}
console.log src/stackoverflow/63811749/fn.ts:3
{isNode:true}
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:4.749秒,估计12秒
在测试中没有直接导入组件的情况下,有什么方法可以做到这一点吗?@nirebam368这是另一个问题吗?如果是这样,请问一个新问题。不,它与我的问题有关,我正在文件顶部导入。在testconst Home=wait import('./Home')中导入react组件时,似乎出现了一些问题代码>我正在获取警告:React.createElement:类型无效--需要字符串(对于内置组件)或类/函数(对于复合组件),但获取了:object。