为什么所有异步功能在Jest / Istanbul覆盖率报告中似乎都未被覆盖? 测试覆盖率报告的图像:

问题描述

我在整个申请表中都这样: 我的功能很好,但是在运行Jest测试覆盖率脚本后,伊斯坦布尔在生成的测试覆盖率报告的async function部分说“分支未覆盖”。

这是什么意思?我该如何掩盖?

我不理解这些功能所涵盖的内容

“ getPolicyStatsAPI”功能的测试示例: 其余功能均以相同的方式进行测试。我不认为答案在测试套件中。但是如果需要,我可以分享其余的内容

  describe(`API Calls`,() => {
    const mockFetch = jest.fn()
    global.fetch = mockFetch
    beforeEach(() => {
      mockFetch.mockClear()
    })
    test('getPolicyStatsAPI fetches the data and returns it as expected',async () => {
      mockFetch.mockReturnValueOnce(createAPIResponse(policySearchState))

      const response = await getPolicyStatsAPI(reqBody)
      expect(fetch).toBeCalledTimes(1)
      expect(response).toEqual(policySearchState.data)
    })
    test('getPolicyStatsAPI returns error on exception',async () => {
      const error = new Error(errorMessage)
      // eslint-disable-next-line prefer-promise-reject-errors
      mockFetch.mockImplementationOnce(() => Promise.reject(errorMessage))
      await expect(getPolicyStatsAPI(reqBody)).rejects.toEqual(error)
      expect(fetch).toBeCalledTimes(1)
    })
  })

这是我收到“分支未覆盖”警告的代码: 分支未覆盖警告显示代码的“异步功能”部分的正上方,并仅显示为黄色高亮。

export async function getPolicyStatsAPI(reqBody: APIRequestBody) {
  const body: APIRequestBody = {
    ...reqBody,}
  type ExpectedResponse = { data: PolicyStats[] }
  const response = await callAPI<ExpectedResponse>({
    url: Endpoint.POLICY_STATS,method: 'POST',body,})
  return response.data
}

测试覆盖率报告的图像:

enter image description here

解决方法

发表评论后,我自己尝试了一些其他修复,显然删除了 transform 中的 jest.config.js 键修复了问题:

module.exports = {
  ...
  globals: {
    'ts-jest': {
      tsconfig: 'tsconfig.test.json',babelConfig: 'babel.config.js'
    },},// Removed this part:
  // transform: {
  //   '^.+\\.js$': '<rootDir>/node_modules/babel-jest',//   '^.+\\.(ts|tsx)?$': 'ts-jest',// },moduleNameMapper: {
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      'identity-obj-proxy',..
}

不确定它是否与您的项目相同,但您可以尝试一下。