React 玩笑测试未达到 api 覆盖率

问题描述 投票:0回答:1

我在某些组件中调用了这个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 方法。

到底发生了什么事情才会让报道变成这样?

如何实现这种覆盖?

reactjs jestjs code-coverage react-testing-library
1个回答
1
投票

您应该模拟

axios
库,在测试中调用
delete
post
put
方法,并确保正确调用模拟。

类似这样的:

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);
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.