如何以开玩笑的方式在模拟函数中返回模拟?

时间:2019-07-22 19:06:48

标签: javascript unit-testing jestjs axios

我正在尝试模拟axios.create()函数,该函数返回axios的实例,但是方法较少。我想通过使用每种方法返回一个对象来模拟此create()方法,但是我也希望使用jest.fn()来模拟这些方法,所以我尝试了类似的方法

axiosInst = {
    get: jest.fn(),
    post: jest.fn(),
    ...
}
axios.create = jest.fn(() => axiosInst)

但是当我运行测试代码时它不起作用,我得到了 TypeError: Cannot read property post of undefined

在我的代码中调用axiosInst.post()是出于某种原因,模拟的axios.create()返回undefined,这绝对没有意义。

对于将mockReturnValue设置在axiosInst上的精确程度,我也感到困惑。在我运行测试之前,在实例上为方法设置返回值的确切语法是什么?

1 个答案:

答案 0 :(得分:0)

尝试以下方法来模拟任何模拟函数的返回值:

axios.create = jest.fn().mockReturnValue({
  get: jest.fn(),
  set: jest.fn()
});

此外,您可以在此处设置已解决的Promise作为get的返回值,因为我们可能需要在测试用例中测试成功/失败方案,如下所示:

  const mockPromise = new Promise(resolve => resolve(
    { /** some mock data here */ })
  );

  axios.create = jest.fn().mockReturnValue({
    get: mockPromise,
    set: jest.fn()
  });
);