Se supone que tengo un código.
const SomeEmailModule = require('SomeEmailModule') const emailModule = new SomeEmailModule() async function sendEmail(htmlBody) { await emailModule.send(htmlBody) return htmlBody }y cuando lo usé en la prueba usando broma
const SomeEmailModule = require('SomeEmailModule') it('can test', async () => { const emailModule = new SomeEmailModule() jest.spyOn(emailModule, 'send').mockImplementation() ......some code ) el módulo en realidad no se burla del método, send , sigue haciendo la funcionalidad original del método, ¿alguna idea de por qué sucedió?
Bien después de algunas pruebas
const mockSend = jest.fn() SomeEmailModule.prototype.send = mockSendesta solución funciona, sin embargo, quiero saber cómo funciona esta mientras que la otra no
este tambien sirve
const mockSend = jest.spyOne(SomeEmailModule.prototype, 'send').mockImplementation()Porque la instancia de emailModule de la clase SomeEmailModule en su caso de prueba es diferente de la del archivo bajo prueba.
jest.spyOn(emailModule, 'send').mockImplementation(); Simplemente instala un espía en la instancia de emailModule creada en el caso de prueba, pero la instancia de emailModule en el archivo bajo prueba no es espiada.
Pero instalar spy en SomeEmailModule.prototype.send() funcionará, porque todas las instancias comparten el mismo prototipo.