Tester une requête fetch
Afin de tester une requête fetch
, il faut pouvoir tester du code asynchrone.
Problème: lors de l'exécution normale, la fonction de test se termine avant que le code
qui vérifie le retour de la requête s'exécute.
Il est possible de demander à mocha d'avoir un comportement différent (voir la doc).
Pour tester du code asynchrone, il faut:
- ajouter un paramètre (ici
done
) à la fonction de test (ce paramètre est lui-même une fonction) - appeler cette fonction
done
sans arguments si le test s'est bien passé (il faut quand même appeler la fonction, donc on ajoute()
) - appeler cette fonction avec une description de l'erreur en paramètre si le test échoue.
On peut par exemple procéder comme suit pour vérifier que le serveur lifap5 fonctionne:
suite("Test avec fetch et promesses", function() {
test("Exemple de test sur une promesse de fetch", function(done){
// Attention à la ligne au dessus, on a ajouté un paramètre done à la fonction de test
fetch("https://lifap5.univ-lyon1.fr")
.then(response => {
chai.assert.equal(200,Number(response.status));
done(); // Le test est terminé et a réussi
})
.catch(err => {
done(err); // le test a échoué avec l'erreur err
})
});
test("Exemple de test qui échoue à cause du code de retour", function(done){
// Attention à la ligne au dessus, on a ajouté un paramètre done à la fonction de test
fetch("https://lifap5.univ-lyon1.fr")
.then(response => {
chai.assert.equal(201,Number(response.status));
// cette assertion va échouer car le serveur renvoie 200 et pas 201 ici
done(); // Le test est terminé et a réussi si on arrive ici,
// mais comme l'assertion précédente échoue, cette ligne n'est jamais exécutée
})
.catch(err => {
done(err); // le test a échoué avec l'erreur err
})
});
})
Remarque: si un assert échoue, une erreur est déclenchée, mais sera récupérée par le catch
final.