使用axios-mock-adapter的模拟axios得到undefined resp

时间:2017-06-01 00:51:59

标签: unit-testing axios jestjs axios-mock-adapter

我创建了一个axios实例......

// api/index.js

const api = axios.create({
  baseURL: '/api/',
  timeout: 2500,
  headers: { Accept: 'application/json' },
});
export default api;

有几个模块使用它..

// api/versions.js

import api from './api';

export function getVersions() {
  return api.get('/versions');
}

我尝试测试......

// Test
import { getVersions } from './api/versions';

const versions= [{ id: 1, desc: 'v1' }, { id: 2, desc: 'v2' }];
mockAdapter.onGet('/versions').reply(200, versions);

getVersions.then((resp) => { // resp is UNDEFINED?
  expect(resp.data).toEqual(versions);
  done();
});

为什么resp未定义?

4 个答案:

答案 0 :(得分:3)

在这里尝试两件事:

  1. 也许你的代码中已经有了这个,但一定要设置mockAdaptor:
  2. import axios from 'axios';
    import MockAdapter from 'axios-mock-adapter';
    
    const mockAdapter = new MockAdapter(axios);

    1. 当您正在测试的函数使用'axios.create'来设置新的axios实例时,我还没有找到让模拟适配器工作的方法。尝试一下这样的事情:
    2. // api/index.js
      
      const api = {
        get(path) {
          return axios.get('/api' + path)
          .then((response) => {
              return response.data;
          });
        }
      }
      export default api;

答案 1 :(得分:0)

根据James M.的建议,我更新了我的api / index.js,而没有使用axios.create ......

<强> API / index.js

import http from 'axios'

export default {

  fetchShoppingLists: () => {
    console.log('API FETCH SHOPPINGLISTS')
    return http
      .get('http://localhost:3000/shoppinglists')
      .then(response => {
        return response
      })
      .catch(error => {
        console.log('FETCH ERROR: ', error)
      })
  }
}

答案 2 :(得分:0)

您不需要axios-mock-adapter。这是我嘲笑我的axios的方式:

// src/__mocks__/axios.ts

const mockAxios = jest.genMockFromModule('axios')

// this is the key to fix the axios.create() undefined error!
mockAxios.create = jest.fn(() => mockAxios)

export default mockAxios

有关更多信息:https://stackoverflow.com/a/51414152/73323

答案 3 :(得分:0)

对于任何仍在为此苦苦挣扎的人。

您需要确保在测试主体之外初始化您的 MockAdapter

即。 ❌ 不正确

it('should do a thing', () => {
    const mockAdapter = new MockAdapter(axios);
})

正确

const mockAdapter = new MockAdapter(axios);

it('should pass' () => {})