以下函数从其实际文件中导入时不会模拟,但是在复制到测试文件中然后直接引用时才起作用:
const testF = () => {
return fetch(null, {
body : JSON.stringify(4)
})
.then(res => res.json());
};
exports.testF = testF;
在我的测试文件中,我有这个:
global.fetch = require('jest-fetch-mock');
const targetFile = require("../targetFile.js");
test('testF', async () => {
await fetch.mockResponseOnce(JSON.stringify(2));
await targetFile.testF().then(jsonData => {
expect(jsonData).toEqual(2)
});
});
也尝试通过这种方式进行设置并重新启动测试运行程序:
// package.json
"jest": {
"setupFiles": [ "./setupJest.js" ]
}
// setupJest.js
global.fetch = require('jest-fetch-mock');
// seen in jest/terminal
TypeError: Cannot read property 'Symbol(Request internals)' of null
225 |
226 | const testF = () => {
> 227 | return fetch(null, {
| ^
228 | body : JSON.stringify(4)
229 | })
230 | .then(res => res.json());
任何人都知道哪里出了问题以及如何获取导入的函数以使用模拟的global.fetch吗?
答案 0 :(得分:0)
通过在目标文件中输入以下内容来解决:
if (typeof window !== 'undefined') {
fetch = window.fetch;
} else { fetch = global.fetch }
const diffFileFetch = () => {
return fetch();
};
现在抓取的范围已正确用于生产/测试。
然后在测试运行器文件中:
global.fetch = jest.fn(() => Promise.resolve('test value'));
test('diffFileFetch', () => {
targetFile.diffFileFetch()
.then(data => {
expect(data).toEqual('test value');
});
});