Usar el mismo jest.mock y devolver resultados diferentes conduce a la acumulación de código duplicado.
No encontré información sobre cómo lidiar con esto y me gustaría preguntar si es posible crear una función similar a la siguiente:
const createMock = (result) => jest.mock('some-module', () => (result));No, es imposible. Siempre debes escribir un nuevo simulacro en la parte superior de describir
Puede usar jest.mock() en el alcance del módulo del archivo de prueba. Se izará a la parte superior del archivo antes de cualquier import . Lo que significa que el módulo importado ya está simulado. Para que pueda usar el método mock.mockReturnValue() en cada caso de prueba para proporcionar un valor de retorno diferente.
P.ej
index.js :
import someFn from './some-module'; export default function main() { return someFn(); } some-module.js :
export default function someFn() { return 'a'; } index.test.js :
import main from './'; import someFn from './some-module'; jest.mock('./some-module'); describe('71219584', () => { test('should pass 1', () => { someFn.mockReturnValue('fake a'); console.log(main()); }); test('should pass 2', () => { someFn.mockReturnValue('fake b'); console.log(main()); }); });Resultado de la prueba:
PASS stackoverflow/71219584/index.test.js 71219584 ✓ should pass 1 (17 ms) ✓ should pass 2 (2 ms) console.log fake a at Object.<anonymous> (stackoverflow/71219584/index.test.js:18:13) console.log fake b at Object.<anonymous> (stackoverflow/71219584/index.test.js:22:13) Test Suites: 1 passed, 1 total Tests: 2 passed, 2 total Snapshots: 0 total Time: 3.186 s