使用笑话模拟多个axios调用

时间:2019-09-01 15:43:26

标签: javascript unit-testing jestjs axios

我刚刚找到了一种使用笑话来模拟axios的有用方法,但是,如果我多次调用具有不同url的axios,如何根据该url指定url和要返回的值? 不使用第三方库,有什么办法吗?

谢谢

    // users.test.js
import axios from 'axios';
import Users from './users';

jest.mock('axios');

test('should fetch users', () => {
  const users = [{name: 'Bob'}];
  const resp = {data: users};
  axios.get.mockResolvedValue(resp);

  // or you could use the following depending on your use case:
  // axios.get.mockImplementation(() => Promise.resolve(resp))

  return Users.all().then(data => expect(data).toEqual(users));
});

2 个答案:

答案 0 :(得分:3)

您可以在.mockImplementation()回调中处理多个条件:

schemes = {
    'bundle': bundlerepo,
    'union': unionrepo,
    'file': _local,
    'http': httppeer,
    'https': httppeer,
    'ssh': sshpeer,
    'static-http': statichttprepo,
}

答案 1 :(得分:0)

它对我有用。下面显示了您在何处以及如何呈现应用。

  it("should work.", async () => {
    let component;
    await act(() => {
      return axios.get("https://api.address.here.com/").then(async (res) => {
        component = renderer.create(<App />);
      });
    });
    expect(component.toJSON()).toMatchSnapshot();
  });