J'essaie de comprendre les simulations manuelles dans Jest. Je pense que cela devrait être facile ... mais ce n'est pas le cas.
Mes répertoires de projets sont comme
Les modèles/user.js et models/__ mocks __/user.js ont le même code:
module.exports = {
create(username, password) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({"username":username, "password": password});
}, 100);
});
}
}
Le fichier __tests __/user-test.js ressemble à ceci:
test('user creation works', () => {
const user = require('../models/user');
//const user = jest.mock('../models/user');
return user.create("mitchell", "boo");
});
Cela fonctionne bien, les tests réussissent, mais quand je le change en:
test('user creation works', () => {
//const user = require('../models/user');
const user = jest.mock('../models/user');
return user.create("mitchell", "boo");
});
Cela ne fonctionne pas et crache:
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)
Ah! Deviner! Ma structure de dossiers est très bien. Il s'avère que j'ai eu un malentendu quant à ce que "jest.mock" a réellement fait. "jest.mock" change le comportement de la fonction "require" du noeud pour utiliser le mock, il ne fait pas de require lui-même.
Mon test aurait dû ressembler à:
jest.mock('../models/user');
test('user creation works', () => {
const user = require('../models/user');
return user.create("mitchell", "boo");
});