我正在尝试使用mockAxios来测试axios拦截器。
export default {
get: jest.fn(() => Promise.resolve({ data: {} }))
}
import axios from 'axios';
export const configurateAxios = () => {
axios.interceptors.response.use(
response => {
return response;
},
error => {
return Promise.reject(error);
}
);
}当我创建mockAxios时:
export default {
get: jest.fn(() => Promise.resolve(data: {}))
}我的所有测试都失败了,并显示以下消息: cannot read property response of undefined my the axios interceptor。这是因为mock axios没有返回响应。它可以只返回一个普通对象。
那么,如何在mockAxios中使用axios拦截器进行测试呢?
发布于 2019-08-23 10:05:48
这就是我如何实现的
Interceptor.js
/* Module that I want to test
* Intercepts every axios request and redirects to login on 401
*/
import axios from 'axios';
export default () => {
axios.interceptors.response.use(
response => {
// Return a successful response back to the calling service
return response;
},
error => {
// Return any error which is not due to authentication back to the calling service
if (error.response.status !== 401) {
return new Promise((resolve, reject) => {
reject(error);
});
} else {
window.location.href = '/operator-portal/login';
return false;
}
}
);
};Interceptor.test.js
import axios from 'axios';
import interceptor from '../../src/apis/interceptor';
jest.mock('axios');
describe('interceptor', () => {
it('redirects to login route when response status is 401', () => {
delete global.window.location;
global.window = Object.create(window);
Object.defineProperty(window, 'location', {
value: {
href: 'url'
}
});
axios.interceptors.response.use = jest.fn((successCb, failCb) => {
failCb({
response: {
status: 401
}
});
});
interceptor();
expect(window.location.href).toEqual('/login');
});
it('redirects to login route when success handler is called', () => {
axios.interceptors.response.use = jest.fn(successCb => {
successCb();
});
interceptor();
window.location.href = 'url';
expect(window.location.href).toEqual('url');
});
});发布于 2019-07-17 21:49:08
为什么不直接使用标准的jest模拟来模拟axios get()方法呢?
这就是我要做的:
// Define how I want my mocked `get` to behave
const axiosMockedGet = async () => {
return {
data: 'the response from the GET request'
};
};
// Mock axios
jest.mock('axios', () => {
return jest.fn().mockImplementation(() => {
return {
// Inject a function named `get`
get: sessionFunctionMock
};
});
});在此之后,应该根据您的axiosMockedGet实现模拟所有对axios的get的调用。
https://stackoverflow.com/questions/54483256
复制相似问题