React jest测试未达到API的覆盖率

juzqafwq  于 2023-10-14  发布在  Jest
关注(0)|答案(1)|浏览(154)

我在一些组件中调用了这个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外,所有使用此API的组件都经过了100%覆盖率测试。

没有覆盖的文件是接口(类型)文件。
我现在面临的问题是尝试和测试API,使其达到100%的覆盖率,但所有的场景都失败了。尽管所有其他方法都已成功模拟,但仅涵盖get方法。
到底是什么让覆盖面表现得像这样?

如何实现这一覆盖?

l0oc07j2

l0oc07j21#

您应该模拟axios库,在测试中调用deletepostput方法,并确保正确调用模拟。
大概是这样的:

import axios from 'axios';
import { Api } from './users';

jest.mock('axios');

describe('Api', function() {
  it('should call delete correctly', () => {
    const url = 'https://stackoverflow.com/';

    Api.delete(url);

    expect(axios.delete).toHaveBeenCalledWith(url);
  });
});

相关问题