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_sys方法完成的,这system就是资源的定位方式。

4

2 回答 2

4

实际上,在与 SRI 讨论 IRC 之后,他向我指出了一个几乎与您在文档中的需求相同的示例。

# 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 回答