2

Mojoliciousフレームワークを使用して開発したアプリのテストケースを作成しています。行われたREST呼び出しに対する適切な応答についてルートをテストしています。サーバーとクライアント間の通信手段としてJSONを使用しています。テストしGET、リクエストするには、次の関数を使用しますPOSTDELETE

GET : get_ok()
POST: post_json_ok()
DELETE: delete_ok()

しかし、PUT私は使用することができませんput_ok()。また、put_ok()の使用例は、

my $t = Test::Mojo->new;
$t->put_ok('this/is/url/to/resource'=>{ "element" => "modified value"})->status_is(204)

毎回(400)に不正な要求ステータスを取得するため、テストが失敗することです。Test::Mojo私は自分のアプリケーションをテストするために使用します。

追加情報:

$t->put_ok('http://localhost:3000/application/instances/system/test'=>{"model" => "testing put"})->status_is(204);

PUTこれは、試行される要求の正確なテストです。はに変更が試みられている
modelリソースのプロパティであり、期待されるステータス応答はです。testtesting put204

コントローラへのマッピングは、このルートによって実行され ます。このルートは、コントローラのメソッドを$r->route('/application/instances/system/:id, id => qr/[A-Za-z0-9 ]+/ -> via('put') ->to(controller => 'system', action => 'update_sys');
呼び出し、それがリソースの配置方法です。 update_syssystem

4

2 に答える 2

4

実際、IRCでSRIと話し合った後、彼はドキュメントであなたのニーズとほぼ同じ例を私に指摘しました。

# Test custom transaction
my $tx = $t->ua->build_json_tx('/user/99' => {name => 'sri'});
$tx->req->method('PUT');
$t->tx($t->ua->start($tx))
  ->status_is(200)
  ->json_is('/message' => 'User has been replaced.');

だからこれはあなたのために働くはずです!

追記:

この議論がある程度の進歩をもたらしたことを知りたいと思うかもしれません。Mojoliciousの次のリリース(バージョン3.66)では、この目的のためのよりクリーンな構文、新しいrequest_okメソッドが追加されます。上記の例は、次のように書き直すことができます。

my $tx = $t->ua->build_json_tx('/user/99' => {name => 'sri'});
$tx->req->method('PUT');
$t->request_ok($tx)
  ->status_is(200)
  ->json_is('/message' => 'User has been replaced.');
于 2012-12-13T02:50:41.223 に答える
1

'this / is / url / to / resource'のルートの定義を共有できますか?サーバーが400を返しているため、アプリのMojo::Controllerが送信内容を理解していないようです...

于 2012-12-12T18:22:10.163 に答える