React 笑话测试未覆盖 api
React jest tests not hitting coverage for api
我在某些组件中调用了这个 api 代码。
const Api: IApi = {
delete: (url: string): Promise<any> => {
return axios.delete(url);
},
get: (url: string): Promise<any> => {
return axios.get(url)
},
post: (url: string, payload: IContact): Promise<any> => {
return axios.post(url, JSON.stringify(payload))
},
put: (url: string, payload: IContact): Promise<any> => {
return axios.put(url, JSON.stringify(payload))
},
}
export { Api }
使用此 api 的所有组件均已通过 100% 覆盖率测试,但 API 除外。
没有覆盖的文件为接口(类型)文件。
我现在面临的问题是尝试测试 API 以使其达到 100% 的覆盖率,但所有场景都失败了。即使已成功模拟所有其他方法,也仅涵盖 get 方法。
为什么报道会变成这样?
如何实现这种覆盖?
您应该模拟 axios
库,在测试中调用 delete
、post
和 put
方法,并确保正确调用模拟。
像这样:
import axios from 'axios';
import { Api } from './users';
jest.mock('axios');
describe('Api', => {
it('should call delete correctly', () => {
const url = 'https://whosebug.com/';
Api.delete(url);
expect(axios.delete).toHaveBeenCalledWith(url);
});
});
我在某些组件中调用了这个 api 代码。
const Api: IApi = {
delete: (url: string): Promise<any> => {
return axios.delete(url);
},
get: (url: string): Promise<any> => {
return axios.get(url)
},
post: (url: string, payload: IContact): Promise<any> => {
return axios.post(url, JSON.stringify(payload))
},
put: (url: string, payload: IContact): Promise<any> => {
return axios.put(url, JSON.stringify(payload))
},
}
export { Api }
使用此 api 的所有组件均已通过 100% 覆盖率测试,但 API 除外。
没有覆盖的文件为接口(类型)文件。
我现在面临的问题是尝试测试 API 以使其达到 100% 的覆盖率,但所有场景都失败了。即使已成功模拟所有其他方法,也仅涵盖 get 方法。
为什么报道会变成这样?
如何实现这种覆盖?
您应该模拟 axios
库,在测试中调用 delete
、post
和 put
方法,并确保正确调用模拟。
像这样:
import axios from 'axios';
import { Api } from './users';
jest.mock('axios');
describe('Api', => {
it('should call delete correctly', () => {
const url = 'https://whosebug.com/';
Api.delete(url);
expect(axios.delete).toHaveBeenCalledWith(url);
});
});