Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
使用jest在组件中进行javascript模拟导入_Javascript_Node.js_Testing_Mocking_Jestjs - Fatal编程技术网

使用jest在组件中进行javascript模拟导入

使用jest在组件中进行javascript模拟导入,javascript,node.js,testing,mocking,jestjs,Javascript,Node.js,Testing,Mocking,Jestjs,知道如何模拟“导入”进行测试吗? 我现在开玩笑 即: 现在在测试文件中,我想模拟浏览器组件的响应 有什么想法吗 谢谢 您需要找到将getBrowser函数注入fetchData的方法 export const fetchData = function(injectedFunction) { const browser = injectedFunction !== undefined? injectedFunction() || getBrowser(); return Ob

知道如何模拟“导入”进行测试吗? 我现在开玩笑

即:

现在在测试文件中,我想模拟
浏览器
组件的响应

有什么想法吗


谢谢

您需要找到将
getBrowser
函数注入fetchData的方法

export const fetchData = function(injectedFunction) {
     const browser = injectedFunction !== undefined?  injectedFunction() || getBrowser();
     return Object.assign({dontcare:1}, browser);
};
这样你现在就可以 //你的测试。。。我在开玩笑

import {fetchData} from './../fetch-data.js';
import {getBrowser} from './../components/browser';
    let mockBrowser = mock(getBrowser);// <choose your mock library>
    // mock the behavior then inject it to the fetchData 
    expect(fetchData(mockBrowser)).toBe({......});
};
从'/../fetch data.js'导入{fetchData};
从“/../components/browser”导入{getBrowser};
让mockBrowser=mock(getBrowser);//
//模拟该行为,然后将其注入fetchData
expect(fetchData(mockBrowser)).toBe({……});
};
这就是为什么在代码中应用依赖注入能够轻松测试它的原因


对我来说,你可以使用测试间谍、存根和模拟

在其中一篇文章的帮助下最终解决了这个问题,但使用Sinnon.js的方式有所不同

1) 我在测试中导入浏览器组件:

import * as browserModule from './../components/browser';
2) 现在在我的测试中,我将模拟我想要的方法:

 sinon.stub(browserModule, 'getBrowser').returns({id: 1});

3) 从这里一切顺利,我调用了我的测试对象,它得到了正确的模拟响应:)

您在
获取数据.js
中的函数依赖于
浏览器.js
导出

您会发现
browser
getBrowser
都是未定义的,具体取决于您的应用程序

由于
browser.js
已准备好导出,您可以使用
jest.requireActual(moduleName)
fetch data.js
中导入并使用该模块。我会用以下方法:

jest.mock(“./browser”,()=>{
const br=开玩笑的要求(“浏览器”);
返回{
…br,
浏览器:{id:'changed value'}
};
})

当然,在其他语言中使用DI,但从未见过js的DI。有什么建议吗?您只需在其中传递参数,并检查参数是否未定义。这样做的唯一目的是,您可以模拟对象/方法进行测试,而无需其他操作。在测试中,您可以通过模拟对象/方法,但在生产代码中,您没有通过对象/方法。行
const browser=injectedFunction!==未定义?injectedFunction()| | getBrowser()将为您执行此操作如果参数未定义,它将执行getBrowser(),如果参数未定义,则执行此参数。这样你就可以模拟执行过程中的内容
 sinon.stub(browserModule, 'getBrowser').returns({id: 1});