PythonでWebTest、Djangoでテストクライアント、Ruby on Railsで機能テストや統合テストを行うなど、私のmochiwebアプリケーションを高レベルでテストしたいと考えています。私はそれをやる方法についてあまり気にしていません。基本的には、HTTPリクエストを送信またはシミュレートして結果にアサーションを付けるだけです。mochiwebアプリケーションをテストするには?
リクエストハンドラが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コードを読むと、Req:parse_post()
が呼び出されると、ソケット上の読み取りがトリガーされるように見えます。私はsrc/mochiweb.erlに興味深いテストコードを見つけました。明らかに、これはHTTPメッセージを構築し、ソケットに書き込んで返答を読み返すことを含んでいます。私は自分のテストコードでこれをやろうとしましたが、数時間後にどこにでも行けませんでした。私は正しい方向に進んでいるのだろうかと思っています。たぶん私はHTTPの配管から、さらに多くの機能を切り離す必要があります。リクエストハンドラ内からReq:parse_post()
を呼び出してはいけません。私が考えているもう一つの解決策は、Erlangに書かれている必要はないサードパーティのWebテストライブラリを使うことです。おそらくRubyやPython、あるいはおそらくSeleniumの何か。
mochiwebアプリの機能テストや統合テストを行うにはどのような解決策をお勧めしますか?
ibrowseを指摘していただきありがとうございます。あなたはそれをeunitとうまく連携させることができましたか? eunit fixtures facilityを使用してサーバーを起動/停止し、テスト環境をセットアップしますか? –