Estoy usando Jest testing Library para algunas funciones simples de sincronización/espera. Pero está fallando una y otra vez ya que soy muy nuevo en bromas. y puede por favor responder lo que expect.assertions(1) hacer aquí
function fetchData() { return new Promise((resolve) => { setTimeout(() => { resolve({ id: 1, name: "test", age: 20, }); }, 1000); }); } test("test async await", async () => { const data = await fetchData(); expect(data.id).toBe(1); }); test("async await error", async () => { expect.assertions(1); try { await fetchData(); } catch (e) { expect(e).toMatch("error"); } });Como señalé en los comentarios, la prueba para el caso de "falla" realmente no tiene sentido si fetchData es la función real porque nunca "rechaza". Para probar el caso de falla en Jest, necesitaría activar de alguna manera el caso Promise.reject.
Si asumimos que fetchData es un envoltorio en una llamada API o algo más, podríamos imaginar algo como esto.
Es posible que tenga una biblioteca o un módulo que esté realizando llamadas API como:
// api.js const api = { actualFetchData: () => { // this is the function that actually connects // to a data source and returns data }, }; module.exports = api; Y su función fetchData que está tratando de probar se ve así:
// fetchData.js const api = require("./api"); function fetchData() { return api.actualFetchData(); } module.exports = fetchData; Luego, suponiendo que esta estructura coincida con lo que está trabajando, puede burlarse de las partes internas de fetchData y probar los casos de éxito y fracaso burlándose de actualFetchData y usando mockResolvedValue y mockRejectedValue .
// fetchData.test.js const fetchData = require("./fetchData"); const api = require("./api"); jest.mock("./api"); const mockApiFetch = jest.fn(); api.actualFetchData = mockApiFetch; describe("when the underlying fetch resolves", () => { beforeEach(() => { mockApiFetch.mockResolvedValue({ id: 1, name: "test", age: 20, }); }); test("test async await", async () => { const data = await fetchData(); expect(data.id).toBe(1); }); }); describe("when the underlying fetch fails", () => { beforeEach(() => { mockApiFetch.mockRejectedValue(new Error("failed to get data")); }); test("async await error", async () => { expect(() => fetchData()).rejects.toThrow("failed to get data"); }); }); Notarás que no expect.assertions porque no parecía que agregara nada a la prueba. En su lugar, solo solía toThrow con el texto que coincidía con el error.
Me doy cuenta de que esto es hacer algunas suposiciones sobre un sistema que no ha descrito completamente en la pregunta inicial, por lo que es posible que esto no sea exactamente a lo que está tratando de llegar. Ojalá esté cerca.