Почему все асинхронные функции выглядят так, как будто они не включены в отчет о покрытии Jest/Istanbul?

У меня есть это во всем моем приложении: у меня есть хорошо покрытая функция, однако в отчете о покрытии тестами, созданном 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
}

Изображение отчета о тестовом покрытии:

введите здесь описание изображения


person Ege    schedule 09.11.2020    source источник
comment
Пожалуйста, отправьте код как текст, а не изображения. Кроме того, включите полное сообщение об ошибке и, возможно, образцы тестов, которые у вас есть, поскольку в настоящее время очень сложно сказать, о чем вас спрашивают.   -  person VLAZ    schedule 09.11.2020
comment
@VLAZ спасибо, что указали на это! Только что обновил свой вопрос.   -  person Ege    schedule 09.11.2020
comment
У меня такая же проблема, удалось решить?   -  person EricDS    schedule 18.06.2021
comment
Нет, я так и не нашел ответа на этот вопрос; ни решения. Прости @EricDS   -  person Ege    schedule 18.06.2021


Ответы (1)


после того, как я оставил комментарий, я сам попробовал некоторые другие исправления, и, по-видимому, удаление ключа 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',
  },
  ..
}

Не уверен, что это то же самое с вашим проектом, но вы можете попробовать.

person EricDS    schedule 18.06.2021