Je ne comprends pas comment la couverture de test est le traitement de cette .catch() branche:ES6 couverture de code Istanbul: comment tester correctement une branche
newUser.save()
.then((savedUser) => {
res.json(savedUser);
})
.catch(
(e) => {
if (e.name === 'ValidationError' && e.errors.username.kind === 'unique') {
res.status(409);
res.json({ error: { message: 'Existing user', field: e.errors.username.path, value: e.errors.username.value } });
} else {
/* istanbul ignore next */
next(e);
}
});
Je teste correctement le premier bloc:
si (e.name === 'ValidationError' & & e.errors.username.kind === 'unique') {...)
et je n'ai pas un test pour le second bloc d'autre , donc j'ai ajouté une déclaration suivante ignorer:
autre { /* istanbul ignorer suivant */ suivant (e); }
la couverture code signale la ligne 58. (si ..) non couverte ..
| % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
-|----------|----------|----------|----------|----------------|
| 100 | 93.75 | 100 | 100 | 58 |
mais le test suivant est en cours d'exécution correctement, couvrant cette ligne ...
describe('# POST /api/v1/users',() => {
it('should NOT create a duplicated user',() => {
return request(app)
.post('/api/v1/users')
.set('Authorization', superAdminJwtToken)
.send(newUser)
.expect(httpStatus.CONFLICT)
.then((res) => {
expect(res.body.error.message).to.equal('Existing user');
expect(res.body.error.field).to.equal('username');
expect(res.body.error.value).to.equal(newUser.username);
});
});
});
Vous devriez tester l'autre, ne l'ignorez pas. Injecter une erreur qui n'est pas 'ValidationError' et voir si l'exécution du bloc else fonctionne. – slebetman
oui .. Je devrais .. mais toute autre erreur serait liée à un document save() dans MongoDB et je ne sais pas quoi et comment écrire un test pour cela .... un lien? – erwin
@erwin Je suis tombé sur cette question SO car je fais face au même problème de couverture de code incorrect rapporté par 'istanbul'. S'il vous plaît laissez-moi savoir si vous avez trouvé une solution. Je suis d'accord avec @slebetman: vous ne devriez pas ignorer pour des raisons de couverture. Si vous utilisez 'sinon' pour stubbing/spying/moquerie, vous pouvez regarder [sinon-mongoose] (https://github.com/underscopeio/sinon-mongoose) sous' examples/'. Cela devrait vous donner une idée de ce que recommande @slebetman – Vikram