Jest.js 模拟服务工作进程不拦截请求

57hvy0tb  于 2023-03-16  发布在  Jest
关注(0)|答案(1)|浏览(123)

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']
};
yc0p9oo0

yc0p9oo01#

你的例子看起来工作的很好,但是我想你不应该像这样替换全局的fetch,而是应该添加whatwg-fetch作为dev依赖项并将其导入到你的setup-jest.js中。

相关问题