Я хотел бы провести высокоуровневое тестирование моего приложения mochiweb, как это можно сделать на Python с WebTest, в Django с тестовым клиентом и в Ruby on Rails с функциональным или интеграционным тестированием. Я не слишком разборчив в том, как это сделать. По сути, я просто хотел бы отправлять или моделировать HTTP-запросы и делать утверждения о результате.
Я произвел рефакторинг своего кода, чтобы мой обработчик запросов не вызывал Req:respond()
, но возвращал кортеж {Code, Headers, Body}
. Это позволяет мне создавать фиктивные запросы с
mochiweb_request:new()
, передайте их моему диспетчеру запросов и сделайте утверждения о результате с помощью 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.
Теперь моя проблема в том, как проверить POST-запросы. В mochiweb я не нашел ничего, что позволило бы мне это сделать. При чтении кода mochiweb кажется, что при вызове Req:parse_post()
запускается чтение в сокете. Я нашел интересный тестовый код в src / mochiweb.erl . Очевидно, это включает в себя построение HTTP-сообщений, запись их в сокет и чтение ответа обратно. Я пытался сделать это в своем собственном тестовом коде, но мне не удалось ничего получить через несколько часов. Я начинаю задаваться вопросом, иду ли я в правильном направлении. Может быть, мне нужно еще больше отделить мою функциональность от HTTP-соединения, т.е. не звоните Req:parse_post()
из моих обработчиков запросов. Другое решение, о котором я думаю, это использование сторонней библиотеки веб-тестирования, необязательно написанной на Erlang. Может быть, что-то в Ruby или Python или даже, может быть, Selenium.
Итак, какое решение вы бы порекомендовали для функционального или интеграционного тестирования приложения mochiweb?