如何在测试文件外部执行请求时使用fetch-mock模拟响应并重新布线

时间:2019-02-25 15:16:25

标签: node.js unit-testing mocking node-modules fetch-mock

我想测试包含一些获取方法的JS文件。现在,我想模拟这些请求方法的响应,并遇到一些问题。

我已经导入了我想通过 rewire 测试的JS文件的所有方法。

为了模拟提取请求,我使用了fetch-mock。

如果我嘲笑这样的响应,则效果很好:

 //test.js

 fetchMock = require('fetch-mock');

 fetchMock.mock('http://example.com', 200);
 const res = await fetch('http://example.com');
 assert(res.ok);
 fetchMock.restore();

但是,当我使用JS文件的方法发送请求时,它不起作用。 例如:

//file.js
function fetchExample() {
    return fetch('http://example.com');
}

//test.js
fetchMock = require('fetch-mock');
app = require('rewire');
fetchExmaple = app.__get__('fetchExmaple');

fetchMock.mock('http://example.com', 200);
const res = await fetchExmaple('http://example.com');
assert(res.ok);
fetchMock.restore();

似乎fetch-mock的范围仅在我的测试文件中,而我通过rewire导出的所有功能都在我的JS文件中执行。

我试图在我的JS文件中将fetchMock设置为全局变量,并在我的测试文件中执行fetchMock.mock()函数。

//test.js
//fetchMock = require('fetch-mock');
app.__set__('fetchMock', require('fetch-mock');
app = require('rewire');
fetchExmaple = app.__get__('fetchExmaple');

fetchMock.mock('http://example.com', 200);
const res = await fetchExmaple('http://example.com');
assert(res.ok);
fetchMock.restore();

但这也不起作用。我不知道如何在我的JS文件中执行fetchMock.mock()。 还是有其他解决方案?

我希望有人能帮助我。

谢谢。

最诚挚的问候。

索尼

0 个答案:

没有答案