我正在为使用Mojolicious框架开发的应用创建测试用例。我正在测试路由,以便为所做的REST调用做出适当的响应。我使用JSON作为服务器和客户端之间的通信方式。要测试GET
,POST
和DELETE
请求,请使用以下函数
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
是资源test
的属性,正在尝试更改至testing put
,预期状态回复为204
。
到控制器的映射是通过
$r->route('/application/instances/system/:id, id => qr/[A-Za-z0-9 ]+/ -> via('put')
->to(controller => 'system', action => 'update_sys');
此路由调用update_sys
控制器中的system
方法,即资源的位置。
答案 0 :(得分:4)
实际上,在与SRI就IRC进行讨论后,他向我指出了一个与documentation中您的需求完全相同的示例。
# 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.');
答案 1 :(得分:1)
您可以分享'this / is / url / to / resource'的路线定义吗?服务器返回400,所以你的应用程序中的Mojo :: Controller似乎无法理解你发送的内容......