Estoy tratando de descubrir simulacros manuales en Jest. Creo que esto debería ser fácil... pero no lo es.
Mis directorios de proyectos son como
Tanto models/user.js como models/__mocks__/user.js tienen el mismo código:
module.exports = { create(username, password) { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({"username":username, "password": password}); }, 100); }); } }El archivo __tests__/user-test.js se ve así:
test('user creation works', () => { const user = require('../models/user'); //const user = jest.mock('../models/user'); return user.create("mitchell", "boo"); });Esto funciona bien, las pruebas pasan, pero cuando lo cambio a:
test('user creation works', () => { //const user = require('../models/user'); const user = jest.mock('../models/user'); return user.create("mitchell", "boo"); });No funciona, y escupe:
FAIL __tests__\user-test.js ● user creation works TypeError: user.create is not a function at Object.<anonymous>.test (__tests__\user-test.js:4:17) at process._tickCallback (internal\process\next_tick.js:103:7)¡Ay! ¡Lo averigué! Mi estructura de carpetas está bien. Resulta que tuve un malentendido en cuanto a lo que realmente hizo "jest.mock". "jest.mock" cambia el comportamiento de la función "requerir" del nodo para usar el simulacro, no hace un requerimiento en sí mismo.
Mi prueba debería haberse visto así:
jest.mock('../models/user'); test('user creation works', () => { const user = require('../models/user'); return user.create("mitchell", "boo"); });