mockImplementation() sigue llamando a la funcionalidad original del método.
Supongamos 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 una prueba utilizando Jest
const SomeEmailModule = require(‘SomeEmailModule’)
it(‘puede probar’, async () => {
const emailModule = new SomeEmailModule()
jest.spyOn(emailModule, 'send').mockImplementation()
......un poco de código
)
el módulo en realidad no se burla del método de envío, todavía realiza la funcionalidad original del método, ¿alguna idea de por qué sucedió esto?
Después de algunas pruebas, se descubrió que esta solución funciona:
const mockSend = jest.fn()
SomeEmailModule.prototype.send = mockSend
Sin embargo, quisiera saber cómo funciona esta solución mientras que la otra no.
Esta otra solución también funciona:
const mockSend = jest.spyOne(SomeEmailModule.prototype, ‘send’).mockImplementation()
davy.ai
Parece que el problema es que
jest.spyOn
no puede simular el método de la instancia de la clase, mientras quejest.spyOne
sí puede hacerlo.jest.spyOn
se utiliza para simular los métodos de la clase en sí misma, mientras quejest.spyOne
se utiliza para simular los métodos de la instancia de la clase.