【问题标题】:Testing a JSON PUT request in mojolicious在 mojolicious 中测试 JSON PUT 请求
【发布时间】:2012-12-11 21:51:12
【问题描述】:

我正在为使用 Mojolicious 框架开发的应用创建测试用例。我正在测试路由以对进行的 REST 调用做出适当的响应。我使用 JSON 作为服务器和客户端之间的通信方式。要测试GETPOSTDELETE 请求,我使用以下函数

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');
此路由调用system 控制器中的update_sys 方法,这就是资源的定位方式。

【问题讨论】:

  • 我没有看到put_ok,我看到了get_ok
  • @Bill Ruppert
    this link 解释了 put_ok

标签: perl testing mojolicious


【解决方案1】:

实际上,在与 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.');

【讨论】:

  • 谢谢@Joel,这正是我想要的。也期待 request_ok 方法。非常感谢!
  • 3.66 已发布! request_ok 随心所欲!
  • 这个答案最近得到了投票,所以我想我会发表评论。所有请求类型的测试方法现在都可以使用content generators,所以在他们那里!
【解决方案2】:

您能分享一下您对 'this/is/url/to/resource' 的路线的定义吗?服务器返回 400,因此您的应用程序中的 Mojo::Controller 似乎不理解您发送的内容...

【讨论】:

  • 我可以向您保证,我的控制器确实了解我发送的内容。如果我使用 REST 客户端使用 PUT 修改任何资源,则如果没有此测试,我可以做到,但不会收到 400 响应。只有当我使用TEST::Mojo 模块测试PUT 请求时,我才会收到错误消息。您能否详细说明路线的定义?你的意思是如何将路由映射到控制器的代码,还是你想要实际的路由本身。无论如何,我确信路线定义正确。
  • 我的意思是让您向我们展示此路由在控制器中映射到的方法。在寻求帮助时,OP 显示与给定问题相对应的代码通常会有所帮助。由于您对假定的 put_ok 的调用看起来不错,因此那些希望提供帮助的人通常需要额外的信息。恕我直言,相信和保证这些事情通常会浪费时间。
  • 谢谢@Paul,我根据您的建议添加了更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多