Unit testing 为什么TypeError:axios.create不是函数?当测试axios时,获取

Unit testing 为什么TypeError:axios.create不是函数?当测试axios时,获取,unit-testing,testing,axios,axios-mock-adapter,Unit Testing,Testing,Axios,Axios Mock Adapter,我正在尝试用React测试我的axiosapi函数 在这里发现这个问题:哪个指向使用axios模拟适配器 import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import chatbot from './chatbot'; describe('Chatbot', () => { it('returns data when sendMessage is called', done =>

我正在尝试用React测试我的axiosapi函数

在这里发现这个问题:哪个指向使用axios模拟适配器

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import chatbot from './chatbot';

describe('Chatbot', () => {
    it('returns data when sendMessage is called', done => {
        var mock = new MockAdapter(axios);
        const data = { response: true };
        mock.onGet('https://us-central1-hutoma-backend.cloudfunctions.net/chat').reply(200, data);

        chatbot.sendMessage(0, 'any').then(response => {
            expect(response).toEqual(data);
            done();
        });
    });
});

真正的功能是:

/**
 * Retrieve all Akamai images
 * @param  {String} akamai Akamai url
 * @return {Thenable}      Resolved: Akamai images
 */
export const callGetAkamai = () =>
  makeRequest('/akamai', 'GET')
    .catch(defaultCatch('callGetAkamai'));
我的测试:

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import { callGetAkamai } from './api';

describe('GetAkamai', () => {
  it('returns data when callGetAkamai is called', (done) => {
    console.log('MockAdapter', MockAdapter);
    const mock = new MockAdapter(axios);
    // const mock = axios.create({
    //   baseURL: 'https://us-central1-hutoma-backend.cloudfunctions.net/chat/'
    // });

    const data = { response: true };
    mock.onGet('https://us-central1-hutoma-backend.cloudfunctions.net/chat').reply(200, data);

    callGetAkamai().then((response) => {
      expect(response).toEqual(data);
      done();
    });
  });
});

你已经在嘲笑axios了吗?我自己也遇到过这个问题,在查看了所有错误的地方后,我意识到我已经在用
jest
嘲笑
axios

将以下代码段放入您的文档中:


虽然您可能可以同时执行这两项操作,但如果您使用的是
axios模拟适配器
,则可能需要删除其他模拟(并跳过上面的代码片段)。

在此处添加此项,因为这是google首次点击该问题,而所选答案并不能真正回答该问题

当您已经在模拟axios时(很可能在
\uuuumocks\uuuu
文件夹中),通常会发生此问题

使用jest,您可以显式地卸载,然后调用这个
axios模拟适配器

jest.unmock('axios');
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
...
axios mock adapter
在处理外部请求时提供了漂亮、灵活的API。但是,它不会全局阻止应用程序进行可由其他组件中的测试触发的外部调用


因此,我发现使用
axios mock adapter
和在
\uuu mocks\uuuu
文件夹中手动模拟都同样有用。

您是在测试文件本身中还是在类似的
\uu mocks\uuuuu/axios.ts中这样做的:
导出默认值{创建:()=>新承诺(()=>{}
好问题,我更新了上面的代码片段,但是你会把它放在
setupTestFrameworkScriptFile
中。希望能有帮助。谢谢。我自己修复了它。我在这里回答了这个问题也很高兴知道:即使整个uu mocks\uuuu/axios.ts被注释掉了,jest仍然会模仿它!删除文件为我解决了它。我使用了jest.unmock('axios'));它解决了问题。所以现在我的测试正在运行,但测试失败了,所以moch没有working@asma卸载后,您是否在同一个文件中进行了导入?您需要在卸载的文件中重新模拟。不知道是否完成了此操作?是的,我进行了导入和模拟,但没有working@asma我也是。你找到问题所在了吗et@KuldeepBhimte不是,我推迟了这个问题。
jest.unmock('axios');
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
...