我正在尝试在React中测试我的Axios API函数。
在这里找到这个问题:how do i test axios in jest,指向使用axios-mock-adapter
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();
});
});
});
3条答案
按热度按时间olqngx591#
你已经在嘲笑
axios
了吗?我自己也遇到过这个问题,在看了所有错误的地方之后,我意识到我已经在用jest
嘲笑axios
了。将以下代码段放入setupTestFrameworkScriptFile中:
虽然您可以同时执行这两个操作,但如果您使用的是
axios-mock-adapter
,则可能需要删除其他模拟(并跳过上面的代码片段)。hivapdat2#
在这里加上这个,因为这是谷歌上第一次点击这个问题,而选择的答案并没有真正回答这个问题。
当您已经在模拟axios时(很可能在
__mocks__
文件夹中),通常会发生此问题。使用jest,可以显式地取消mock,然后调用
axios-mock-adapter
。axios-mock-adapter
在处理外部请求时提供了很好的、灵活的API。但是,它不会全局阻止您的应用进行外部调用,这些调用可能由不同组件中的测试触发。因此,我发现使用
axios-mock-adapter
和在__mocks__
文件夹中手动模拟同样有帮助。bmvo0sr53#
您的错误是由于您使用的是带有自定义配置**axios.create([config])**的新axios示例
但在测试中你是在测试axios
如果你正在创建一个新的axios示例,那么你需要测试它,而不是axios本身。