質問

Mochiwebアプリの高レベルのテストを行いたいと思います。Webtestを使用したPython、テストクライアントとの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.

今、私の問題は、投稿リクエストをテストする方法です。 Mochiwebには何も見つかりませんでした。 Mochiwebコードを読むことから、いつのようです Req:parse_post() 呼ばれ、ソケットで読み取りをトリガーします。興味深いテストコードを見つけました src/mochiweb.erl. 。どうやらこれには、HTTPメッセージの作成、ソケットにそれらを書き、応答を読み戻すことが含まれます。私は自分のテストコードでこれをやろうとしましたが、数時間後にどこにも行くことができませんでした。私は正しい方向に行くかどうか疑問に思い始めています。たぶん、HTTP配管から自分の機能をさらに切り離す必要があるかもしれません。電話しないでください Req:parse_post() 私のリクエストハンドラー内から。私が考えているもう1つの解決策は、Erlangに書かれた必要ではない、サードパーティのWebテストライブラリを使用することです。 RubyやPython、あるいはSeleniumのようなものかもしれません。

では、Mochiwebアプリの機能的または統合テストを行うために、どのソリューションをお勧めしますか?

役に立ちましたか?

解決

私は一般的なテストサーバーを使用し、テストにはiBrowseを使用します。これが例です:

post_cap_query_no_caps(_Config) ->
A="<?xml version=\"1.0\" encoding=\"utf-8\"?><query><capabilities/></query>",
{ok, "200", _C, Body}=ibrowse:send_req("http://localhost:8000/devices",  XML_CONTENT_TYPE, post, A),
"<devices/>" == Body.

他のヒント

主にHTTP配管からテストを分離します。通常、機能的な環境で行う正しいこと。

SRC/mochiweb_multipart.erlには、おそらく特定のユースケースにより関連するいくつかのeunitコードがあります。

HTTPクライアントを使用して電話をかけてみませんか? iBrowseを使用して、必要に応じてデータを投稿するなど、WebMachineサーバーをテストします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top