es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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()

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que jest.spyOn no puede simular el método de la instancia de la clase, mientras que jest.spyOne sí puede hacerlo. jest.spyOn se utiliza para simular los métodos de la clase en sí misma, mientras que jest.spyOne se utiliza para simular los métodos de la instancia de la clase.

Comments are closed.