app.js
class MyApp {
async fetchData() {
const response = await fetch('http://myurl.com', { method: 'GET' });
console.log(response); // received: {}, expected: { val: true }
}
}
export { MyApp };
app.test.js
import {MyApp} from "./app";
import {setupServer} from "msw/node";
import {rest} from "msw";
const server = setupServer(
rest.get('http://myurl.com', (req, res, ctx) => res(ctx.json({ val: true })))
);
describe('App', () => {
beforeAll(() => {
server.listen();
});
afterEach(() => {
server.resetHandlers();
});
afterAll(() => {
server.close();
})
it('should succeed', async () => {
const myApp = new MyApp();
await myApp.fetchData();
});
});
我有一个简单的项目,几乎空的只有几个文件。我不得不polyfill提取,所以在我的setup-jest.js
文件中,我有
global.fetch = () => Promise.resolve({});
如果不这样做,我会得到一个错误,即提取是未定义的。问题是在fetchData
方法中,我得到的是polyfill值,而不是{val:true},我在setupServer内的测试文件中定义了它。为什么我没有得到预期的值?
jest.config.js
module.exports = {
setupFilesAfterEnv: ['<rootDir>/setup-jest.js']
};
1条答案
按热度按时间yc0p9oo01#
你的例子看起来工作的很好,但是我想你不应该像这样替换全局的
fetch
,而是应该添加whatwg-fetch
作为dev依赖项并将其导入到你的setup-jest.js
中。