Si j'ai du code dans un test qui ne devrait jamais être atteint (par exemple, la clause fail
d'une séquence de promesse), comment puis-je forcer l'échec du test?
J'utilise quelque chose comme expect(true).toBe(false);
mais ce n'est pas joli.
L’alternative est d’attendre l’expiration du test, ce que je veux éviter (car il est lent).
Jasmine fournit une méthode globale fail()
, qui peut être utilisée dans des blocs de spécifications it()
et permet également d’utiliser un message d’erreur personnalisé:
it('should finish successfully', function (done) {
MyService.getNumber()
.success(function (number) {
expect(number).toBe(2);
done();
})
.fail(function (err) {
fail('Unwanted code branch');
});
});
Cette fonctionnalité est intégrée à Jasmine et fonctionne parfaitement partout, par rapport à la méthode "erreur" que j'ai mentionnée ci-dessous.
Avant la mise à jour:
Vous pouvez générer une erreur à partir de cette branche de code, une spécification échouera immédiatement et vous pourrez fournir un message d'erreur personnalisé:
it('should finish successfully', function (done) {
MyService.getNumber()
.success(function (number) {
expect(number).toBe(2);
done();
})
.fail(function (err) {
throw new Error('Unwanted code branch');
});
});
Mais vous devez faire attention si vous voulez générer une erreur de Promise success handler then()
, car l'erreur sera avalée et ne sera jamais reproduite. Vous devez également être conscient des éventuels gestionnaires d'erreurs dans votre application, qui pourraient intercepter cette erreur dans votre application. Par conséquent, le test ne pourra pas échouer.
Merci TrueWill d’avoir attiré mon attention sur cette solution. Si vous testez des fonctions qui renvoient des promesses, vous devez utiliser done
dans it()
. Et au lieu d'appeler fail()
, vous devez appeler done.fail()
. Voir Documentation Jasmine .
Voici un exemple
describe('initialize', () => {
// Initialize my component using a MOCK axios
let axios = jasmine.createSpyObj<any>('axios', ['get', 'post', 'put', 'delete']);
let mycomponent = new MyComponent(axios);
it('should load the data', done => {
axios.get.and.returnValues(Promise.resolve({ data: dummyList }));
mycomponent.initialize().then(() => {
expect(mycomponent.dataList.length).toEqual(4);
done();
}, done.fail); // <=== NOTICE
});
});