用axios-mock-adapter模拟axios get undefined resp

1szpjjfi  于 2023-04-06  发布在  iOS
关注(0)|答案(4)|浏览(134)

我创建了一个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是undefined?

zlwx9yxi

zlwx9yxi1#

这里有两件事要尝试:
1.也许你已经在你的代码中有了这个,但是一定要设置mockAdaptor:

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';

const mockAdapter = new MockAdapter(axios);

1.当你测试的函数使用'axios.create'来设置一个新的axios示例时,我还没有找到一种方法来让mock适配器工作。沿着下面的方法:

// api/index.js

const api = {
  get(path) {
    return axios.get('/api' + path)
    .then((response) => {
        return response.data;
    });
  }
}
export default api;
falq053o

falq053o2#

对于任何仍在为此挣扎的人来说。
您需要确保在测试主体之外初始化MockAdapter
错误

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

正确

const mockAdapter = new MockAdapter(axios);

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

egmofgnx3#

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

API

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)
      })
  }
}
olqngx59

olqngx594#

你不需要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

相关问题