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 库,在测试中调用 deletepostput 方法,并确保正确调用模拟。

像这样:

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