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的主要内容,如果未能解决你的问题,请参考以下文章

Jest : 模拟导入 JSON 文件

Webpack 代码拆分使用 vueJs 组件中断 jest 导入

ReferenceError:您正在尝试在 Jest 环境被拆除后“导入”一个文件

如何在 javascript 中模拟内部 JSON 对象?

Jest Manual Mocks with React 和 Typescript:模拟 ES6 类依赖

Jest - 模拟函数,从另一个文件导入