Búsqueda de sitios web

javascript - ¿Por qué todas las funciones async parecen no estar cubiertas en el informe de cobertura de Jest/Istanbul?


Tengo esto en toda mi aplicación: Tengo una función bien cubierta, sin embargo dice "rama no cubierta" en la parte de async function en el informe de cobertura de pruebas generado por Istanbul después de ejecutar el script de cobertura de pruebas de Jest.

¿Qué significa esto? ¿Cómo puedo cubrirlo?

No entiendo qué no está cubierto en estas funciones.

Ejemplo de prueba para la función "getPolicyStatsAPI": El resto de las funciones se prueban de la misma manera. No creo que la respuesta esté en los conjuntos de pruebas. Pero si es necesario, puedo compartir el resto.

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

Aquí está el código en el que recibo la advertencia "rama no cubierta": La advertencia de rama no cubierta aparece justo sobre la parte "async function" del código, y solo allí, como un resaltado amarillo.

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
}

Imagen del informe de cobertura de pruebas:

Respuesta #1

Después de dejar el comentario intenté algunas otras soluciones por mi cuenta, y aparentemente eliminar la clave transform en mi jest.config.js solucionó el problema:

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',
  },
  ..
}

No estoy seguro si es lo mismo con tu proyecto, pero podrías intentarlo.

Respuesta #2

Cada función asíncrona necesita un await:

    mockFetch.mockReturnValueOnce(await createAPIResponse(policySearchState))

    const response = await getPolicyStatsAPI(reqBody)

    expect(response).toEqual(await policySearchState.data)

    await expect(await getPolicyStatsAPI(reqBody)).rejects.toEqual(error)

Artículos relacionados