Burlarse de un módulo con patrón de módulo y tener una funcionalidad única en cada prueba.
Tengo problemas para tener una implementación única de búsqueda a partir de esta configuración de patrón de módulo que tengo (MyConnection.js) – aquí hay algo similar a lo que tengo:
// MyConnection.js
const MyConnection = () => {
const search = async (q) => {
//… alguna funcionalidad
};
return {
search,
};
};
//JEST TESTS
const MyConnection = require(‘../MyConnection’)
// Esto funciona, pero establece la implementación de búsqueda para todo el archivo de prueba, creo que
jest.mock(‘../MyConnection’, () => {
return jest.fn(() => {
search: () => [‘mocked’, ‘fn’, ‘resultados’]
})
})
//Los tests de jest – quiero diferentes implementaciones de búsqueda en cada prueba
describe(‘pruebas de conexión’, () => {
it('prueba uno', () => {
// No estoy seguro si es algo como esto para establecer 'search' para cada prueba? Esto no funciona tal como está
MyConnection.search.mockImplementation((q)=>{`Buscaste ${q}`})
})
it('prueba dos', () => {
MyConnection.search.mockImplementation((q)=>{q.length>32? 'a': 'b' })
})
})
davy.ai
Una forma de lograr implementaciones de burla únicas de Jest de la función de búsqueda para cada prueba es mover la implementación de burla a cada prueba por separado en lugar de establecerla globalmente para todo el archivo de prueba.
Aquí hay una versión actualizada de las pruebas de Jest:
En cada prueba, primero requerimos el módulo MyConnection y creamos una instancia de él:
const myConnectionInstance = MyConnection();
. Luego, establecemos la función de búsqueda en una nueva implementación de burla de Jest, específica para esta prueba, utilizandomyConnectionInstance.search = jest.fn((q) => { ... });
. Finalmente, podemos usarmyConnectionInstance.search
como de costumbre en nuestro código de prueba.Este enfoque asegura que cada prueba tenga su propia implementación única de burla de la función de búsqueda.