axios 如何在React Jest中模拟获取

wd2eg0qa  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(158)

我是一个新的React测试,我试图通过模拟获取请求来测试我的异步函数。但是,当我运行测试时,它给了我一个假阳性。我期望模拟获取返回模拟数据,但它从数据库返回实际数据。我做错了什么?
下面是我正在测试的实际函数。

export const fetchVisit = async (currentUserId, visitDate) => {
  try {
    const visitData = await axios.post(
      `${BASE_URL}/visit/${currentUserId}`,
      visitDate
    );

    const {
      data: {
        data: { visit },
      },
    } = visitData;

    return visit;
  } catch (err) {
    return err;
  }
};

这是我的测试套件中的函数

const mockData = [
  {
    serviceusersToVisit: [[Object], [Object]],
    _id: '1',
    currentUserId: '123',
    __v: 0,
    dateOfVisit: '2022-08-31T00:00:00.000Z',
  },
];

global.fetch = jest.fn(() =>
  Promise.resolve({
    json: () => Promise.resolve(mockData),
  })
);

describe('MOCK FETCH OF fetchVisit', () => {
  it('should fetch a single visit', async () => {
    let visitDate = {
      dateOfVisit: '2022-08-31T00:00:00.000+00:00',
    };

    let visit = await fetchVisit('123', visitDate);
    console.log(visit);
    expect(visit.length).toBe(1);
  });
}
lf5gs5x2

lf5gs5x21#

您正在使用axios.post()发出HTTP请求,您应该模拟axios.post()方法而不是fetch
请尝试:

jest.spyOn(axios, 'post').mockResolvedValue({ data: mockData })

相关问题