EDIT 2: Ver los comentarios a continuación
Estoy intentando escribir algunas pruebas para una función de middleware, pero no sé cómo escribirla para que .toHaveBeenCalled() coincida con la cantidad esperada de llamadas (en este caso, 1) en lugar de 0 llamadas. Actualmente creo una variable dentro de la prueba para simular un objeto de respuesta rápida y la paso a la función que estoy probando:
índice.ts
const doSomething = async (req, res) => { .... axios(options) .then((response) => { const data = response.data; ... res.status(200); res.send(); .... }índice.prueba.ts
const sampleResponse = { status: jest.fn(), send: jest.fn(), json: jest.fn(), } as unknown as Response; ... await doSomething(sampleRequest, sampleResponse); expect(sampleResponse.status).toHaveBeenCalled();Jest muestra las líneas con res.status(200) y res.send() como están cubiertas en el informe de cobertura.
He leído algunos hilos en los que este error tiene que ver con instancias diferentes/distintas de funciones simuladas que se crean al ejecutar la prueba; es ese el caso aquí? ¿Quizás debería estar probando algo completamente diferente (la función actualmente no devuelve nada)?
Editar :
Me he centrado en tratar de probar un efecto secundario; Siento que estoy cerca, pero todavía recibo 0 llamadas para esta prueba también. Sospecho que es el mismo problema con respecto a las referencias/instancias.
índice.ts
import Foo from './foo.ts'; const doSomething = async (req, res) => { .... axios(options) .then((response) => { const data = response.data; ... // getInstance() looks for an instance and creates one if not defined Foo.getInstance().doFooThings(); }) .... }índice.prueba.ts
import Foo from './foo.ts' ... const fooMock = jest.spyOn(foo.prototype,'doFooThings').mockImplementation(() => Promise.resolve(console.log('hi'))); await doSomething(req, res); expect(fooMock).toHaveBeenCalled(); // still says 0 calls, but 'hi' is getting console logged... ...