任何想法如何模拟“导入”进行测试? 我现在用jest。
即:
//browser.js
export const browser = {
id: undefined
};
export const getBrowser = function() {
return browser;
};
//fetch-data.js
//code that uses the browser and I wanna test
import {getBrowser} from './../components/browser';
export const fetchData = function() {
const browser = getBrowser();
return Object.assign({dontcare:1}, browser);
};
//My test... Im using jest
import {fetchData} from './../fetch-data.js';
expect(fetchData()).toBe({......});
};
现在在测试文件中我想模拟browser
组件的响应......
有什么想法吗?
谢谢!
答案 0 :(得分:0)
你需要找到一种方法将getBrowser
函数注入fetchData
export const fetchData = function(injectedFunction) {
const browser = injectedFunction !== undefined? injectedFunction() || getBrowser();
return Object.assign({dontcare:1}, browser);
};
这样你就可以了
//你的测试......我正在使用jest
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({......});
};
为什么在代码中应用依赖注入以便能够轻松测试
的原因对我来说,你可以使用http://sinonjs.org/作为测试间谍,存根和嘲笑
答案 1 :(得分:0)
最后在其中一个帖子的帮助下解决了这个问题,但与Sinnon.js采用了不同的方式
1)我在测试中导入了浏览器组件:
A.method_to_call.calls
2)现在在我的测试中我会嘲笑我想要的方法:
import * as browserModule from './../components/browser';
3)从这里开始,我称之为测试对象并获得正确的模拟响应:)
答案 2 :(得分:0)
您在fetch-data.js
中的功能取决于从<{1}导出。
您会发现browser.js
和browser
都未定义,具体取决于您的jest configuration。
由于getBrowser
已准备就绪,可以导出,因此您可以使用browser.js
来导入并在jest.requireActual(moduleName)
中使用该模块。我将通过以下方式进行此操作:
fetch-data.js