Soy nuevo en Jest, estoy tratando de usarlo para probar si se llamó a una función o no. Me di cuenta de que mock.calls.length no se restablece para cada prueba, sino que se acumula. ¿Cómo puedo hacer que sea 0 antes de cada prueba? No quiero que mis próximas pruebas dependan de los resultados de las anteriores.
Sé que hay beforeEach en Jest. ¿Debería usarlo? ¿Cuál es la mejor manera de restablecer mock.calls.length? Gracias.
Un ejemplo de código:
Sum.js:
import local from 'api/local'; export default { addNumbers(a, b) { if (a + b <= 10) { local.getData(); } return a + b; }, };Suma.prueba.js
import sum from 'api/sum'; import local from 'api/local'; jest.mock('api/local'); // For current implementation, there is a difference // if I put test 1 before test 2. I want it to be no difference // test 1 test('should not to call local if sum is more than 10', () => { expect(sum.addNumbers(5, 10)).toBe(15); expect(local.getData.mock.calls.length).toBe(0); }); // test 2 test('should call local if sum <= 10', () => { expect(sum.addNumbers(1, 4)).toBe(5); expect(local.getData.mock.calls.length).toBe(1); });Una forma que encontré para manejarlo: borrar la función simulada después de cada prueba:
Para agregar a Sum.test.js:
afterEach(() => { local.getData.mockClear(); });Si desea borrar todas las funciones simuladas después de cada prueba, use clearAllMocks
afterEach(() => { jest.clearAllMocks(); });Como señaló @AlexEfremov en los comentarios. Es posible que desee utilizar clearAllMocks después de cada prueba:
afterEach(() => { jest.clearAllMocks(); });Tenga en cuenta que esto borrará el recuento de llamadas de cada función simulada que tenga, pero probablemente esa sea la forma correcta.
Puede configurar Jest para restablecer o borrar simulacros después de cada prueba colocando uno de estos parámetros en su jest.config.js :
module.exports = { resetMocks: true, };o
module.exports = { clearMocks: true, };Aquí está la documentación:
https://jestjs.io/docs/en/configuration#resetmocks-boolean
resetMocks [booleano]
Predeterminado: falso
Restablece automáticamente el estado simulado antes de cada prueba. Equivale a llamar a jest.resetAllMocks() antes de cada prueba. Esto conducirá a que se eliminen las implementaciones falsas de cualquier simulacro, pero no restaurará su implementación inicial.
https://jestjs.io/docs/configuration#clearmocks-boolean
clearMocks [booleano]
Predeterminado: falso
Borre automáticamente llamadas, instancias y resultados simulados antes de cada prueba. Equivalente a llamar a jest.clearAllMocks() antes de cada prueba. Esto no elimina ninguna implementación simulada que se haya proporcionado.