Tengo la siguiente función que usa fetch() para hacer una llamada a la API:
export async function fetchCars(dealershipId) { return request('path/to/endpoint/' + dealershipId) .then((response) => { if (response.ok === false) { return Promise.reject(); } return response.json(); }) .then((cars) => { return parseMyCars(cars); }); } Quiero probar cuándo falla la llamada (específicamente cuando se return Promise.reject() ). Tengo la siguiente prueba de broma en este momento:
(fetch as jest.Mock).mockImplementation(() => Promise.resolve({ ok: false }) ); const result = await fetchCars(1); expect(request).toHaveBeenCalledWith('/path/to/endpoint/1'); expect(result).toEqual(Promise.reject()); pero recibo un mensaje de Failed: undefined al ejecutar la prueba. He intentado usar:
(fetch as jest.Mock).mockRejectedValue(() => Promise.resolve({ ok: false }) ); pero recibe un mensaje similar Failed: [Function anonymous] .
¿Cuál es la forma correcta de probar la promesa rechazada aquí?
Su prueba está fallando porque está lanzando una excepción. Necesita capturar esa excepción, hay muchas maneras de hacerlo, y usar el asistente de rechazos es una de ellas:
it("should fail", async () => { (window.fetch as jest.Mock).mockResolvedValueOnce({ ok: false, }); await expect(fetchCars(1)).rejects.toEqual(/* error you are expecting*/); });Hay un par de maneras de lidiar con esto correctamente. Creo que el problema es que estás esperando tu promesa.
Si planea usar await, entonces debe esperar el expect:
const result = fetchCars(1); await expect(result).toEqual(Promise.reject()); // ✅ Correct setupo simplemente puede devolver la promesa no esperada:
const result = fetchCars(1); return expect(result).toEqual(Promise.reject()); // ✅ Correct setupSi no regresa o espera lo esperado, es posible que observe que obtiene un falso positivo:
const result = fetchCars(1); expect(result).toEqual(Promise.reject()); // ❌ False positive!Creé un ejemplo de codesandbox que muestra cómo simular la función de búsqueda y cómo configurar correctamente la prueba, incluidas las formas incorrectas. Juega con la pestaña Pruebas en la parte superior derecha.