javascript模拟导入组件与jest

问题描述 投票:0回答:2

任何想法如何模拟“导入”进行测试?我现在用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组件的响应...

有任何想法吗?

谢谢!

javascript node.js testing mocking jestjs
2个回答
0
投票

你需要找到一种方法将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/测试间谍,存根和嘲笑


0
投票

最后在其中一个帖子的帮助下解决了它,但与Sinnon.js采用了不同的方式

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

import * as browserModule from './../components/browser';

2)现在在我的测试中我将模拟我想要的方法:

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

3)从这里好的,我调用我的测试对象,它得到适当的模拟响应:)

© www.soinside.com 2019 - 2024. All rights reserved.