javascript - 如何解析 promise 并监视 axios 中的函数

标签 javascript promise jestjs axios-mock-adapter

function getusers(config){
     const {successCB} = config;
     return axios.get(url, params)
      .then(response => {
        successCB(response.data, config);
      });
}

************************ UT ******************************

const mock = new MockAdapter(axios);
const successCB = jest.fn();

mock.onGet(url).reply(200, 'success');
const axiosSpy = jest.spyOn(axios, 'get');
const successCBSpy = jest.spyOn(config, 'successCB');

getUsers({successCB});

axiosSpy 从下面的代码成功

expect(axiosSpy).toHaveBeenCalled();

但它并没有深入到内部去解决 successCB 的结果

expect(successCBSpy).toHaveBeenCalled();

抛出错误为:successCB 从未调用过

我做错了什么,我应该期待什么?

我只能使用 ES6 解决方案。

最佳答案

确保从 getusers 返回 Promise,这样您就可以在测试中await

这是一个完整的工作示例:

const axios = require('axios');
const MockAdapter = require('axios-mock-adapter');

const url = 'test-url';
const params = {};

function getusers(config) {
  const { successCB } = config;
  return axios.get(url, params)  // <= return the Promise
    .then(response => {
      successCB(response.data, config);
    });
}

test('getusers', async () => {  // <= async test function
  const mock = new MockAdapter(axios);
  const successCB = jest.fn();

  mock.onGet(url).reply(200, 'success');
  const axiosSpy = jest.spyOn(axios, 'get');

  await getusers({ successCB });  // <= await the Promise

  expect(axiosSpy).toHaveBeenCalled();  // Success!
  expect(successCB.mock.calls[0][0]).toBe('success');  // Success!
})

更新

如果 async/await 语法不是一个选项,那么您可以在 then 回调中执行断言,并从测试 Jest 知道等待它:

test('getusers', () => {
  const mock = new MockAdapter(axios);
  const successCB = jest.fn();

  mock.onGet(url).reply(200, 'success');
  const axiosSpy = jest.spyOn(axios, 'get');

  return getusers({ successCB }).then(() => {
    expect(axiosSpy).toHaveBeenCalled();  // Success!
    expect(successCB.mock.calls[0][0]).toBe('success');  // Success!
  });
})

关于javascript - 如何解析 promise 并监视 axios 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55257782/

相关文章:

javascript - 使用 Mocha 和 Chai 捕获超出范围的错误

javascript - 派生类究竟从其基类继承了什么?

angularjs - 当 promise 链中有错误时如何回滚更改

reactjs - 未定义的“_isMockFunction”

javascript - 使用 Jest 测试框架在没有导出的情况下测试 JavaScript

javascript - 如何在模拟的 Jest 函数中使用 var 作为返回值?

Javascript - 如何在表达式中放置一个语句?

javascript - 这段代码在 Internet Explorer 中可以正常工作,但在 Mozilla Firefox 中却不能。有人可以帮忙吗

JavaScript、AngularJS - 发送多个同时的 ajax 调用

javascript - TypeError : (intermediate value). 那么不是一个函数