javascript模拟导入组件与jest
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript模拟导入组件与jest相关的知识,希望对你有一定的参考价值。
任何想法如何模拟“导入”进行测试?我现在用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
组件的响应...
有任何想法吗?
谢谢!
答案
你需要找到一种方法将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({......});
};
这就是为什么在代码中应用依赖注入以便能够轻松测试它的原因
对我来说,你可以使用http://sinonjs.org/测试间谍,存根和嘲笑
另一答案
最后在其中一个帖子的帮助下解决了它,但与Sinnon.js采用了不同的方式
1)我在测试中导入浏览器组件:
import * as browserModule from './../components/browser';
2)现在在我的测试中我将模拟我想要的方法:
sinon.stub(browserModule, 'getBrowser').returns({id: 1});
3)从这里好的,我调用我的测试对象,它得到适当的模拟响应:)
以上是关于javascript模拟导入组件与jest的主要内容,如果未能解决你的问题,请参考以下文章
Webpack 代码拆分使用 vueJs 组件中断 jest 导入
ReferenceError:您正在尝试在 Jest 环境被拆除后“导入”一个文件