Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何嘲笑它_Javascript_Node.js_Unit Testing_Mocking_Jestjs - Fatal编程技术网

Javascript 如何嘲笑它

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

关于如何在it测试中模拟const,有无数个问题,但没有一个可行

是否有人能提供工作解决方案,如何模拟
从“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这是另一个问题吗?如果是这样,请问一个新问题。不,它与我的问题有关,我正在文件顶部导入。在test
const Home=wait import('./Home')中导入react组件时,似乎出现了一些问题我正在获取
警告:React.createElement:类型无效--需要字符串(对于内置组件)或类/函数(对于复合组件),但获取了:object。