Je voudrais faire des tests de haut niveau de mon application mochiweb, comme il est possible de faire en Python avec WebTest, dans Django avec le client de test et dans Ruby on Rails avec des tests fonctionnels ou d'intégration. Je ne suis pas trop difficile sur la façon de le faire. Fondamentalement, je voudrais juste envoyer ou simuler des requêtes HTTP et faire des assertions sur le résultat.Comment tester une application mochiweb?
J'ai refaçonné mon code afin que mon gestionnaire de requêtes n'appelle pas lui-même Req:respond()
, mais renvoie un numéro de ligne {Code, Headers, Body}
. Cela me permet de construire des demandes fictives avec mochiweb_request:new()
, les transmettre à mon répartiteur de demande et faire des affirmations sur le résultat en utilisant EUnit:
make_request(Method, Path) ->
Request = mochiweb_request:new(nil, Method, Path, {1, 1},
mochiweb_headers:make([{"Accept", "text/html"}])),
Response = myapp:dispatch(Request),
Response.
signin_test() ->
{Code, _, _} = make_request('GET', "/signin"),
?assertEqual(Code, 200),
ok.
Maintenant, mon problème est de savoir comment tester les requêtes POST. Je n'ai rien trouvé dans mochiweb qui me permettrait de faire ça. De la lecture du code mochiweb, il semble que lorsque Req:parse_post()
est appelée, il déclenche une lecture sur un socket. J'ai trouvé un code de test intéressant dans src/mochiweb.erl. Apparemment, cela implique la construction de messages HTTP, en les écrivant sur une socket et en lisant la réponse. J'ai essayé de le faire dans mon propre code de test mais je n'ai pas réussi à arriver après quelques heures. Je commence à me demander si je vais dans la bonne direction. Peut-être que j'ai besoin de découpler encore plus mes fonctionnalités de la plomberie HTTP, c'est à dire. n'appelle pas Req:parse_post()
à partir de mes gestionnaires de requêtes. Une autre solution que je pense serait d'utiliser une bibliothèque de tests de sites Web tiers, pas nécessaire écrite en Erlang. Peut-être quelque chose en Ruby ou Python ou même peut-être Selenium.
Alors, quelle solution recommanderiez-vous pour faire des tests fonctionnels ou d'intégration d'une application mochiweb?
Merci d'avoir signalé ibrowse. Avez-vous réussi à le faire fonctionner avec eunit? Démarrez-vous/arrêtez-vous le serveur et configurez-vous un environnement de test en utilisant les installations d'eunit? –