以下函数在从其实际文件导入时不模拟,但在复制到测试文件中然后直接引用时可以工作:
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?
发布于 2019-06-08 13:19:27
通过在目标文件中输入以下内容即可解决:
if (typeof window !== 'undefined') {
fetch = window.fetch;
} else { fetch = global.fetch }
const diffFileFetch = () => {
return fetch();
};现在,为了生产/测试,fetch的作用域是正确的。
然后在test runner文件中:
global.fetch = jest.fn(() => Promise.resolve('test value'));
test('diffFileFetch', () => {
targetFile.diffFileFetch()
.then(data => {
expect(data).toEqual('test value');
});
});https://stackoverflow.com/questions/56488253
复制相似问题