【问题标题】:How to display sinatra error and other variables in minitest output如何在 minitest 输出中显示 sinatra 错误和其他变量
【发布时间】:2012-06-01 17:21:28
【问题描述】:

我正在使用 minitest 测试和编写一个 sinatra 应用程序。目前,我使用 last_response.status 来查看请求发生了什么:

assert last_response.ok?, "Status 200 expected but was #{last_response.status}."

显示错误,如“预期状态为 200,但为 500”。但我想在 Rack ENV 中显示 sinatra.error,例如:

sinatra.error #<ArgumentError: wrong number of arguments (1 for 2)>

这样我就不必启动应用程序并在浏览器上进行检查。我试过这段代码:

assert last_response.ok?, "#{last_response.error}."

但是它抛出了一个“private method `error' called for #”错误。

如何在 sinatra 错误输出中显示变量的值?

【问题讨论】:

  • 试试last_response.send(:error)
  • 抛出无方法错误,而且我在Rack Documentation 中找不到发送方法。你在哪里找到的?
  • 这不是 Rack 方法。这是Object#send。您可以使用它访问私有方法。如果send 未定义,您也可以尝试Object#__send__
  • 它会抛出“试图创建没有块的 Proc 对象”错误。虽然我试过了,但我还没有学过procs。如果这是问题,你介意指导我在 ruby​​ 中的 procs。我的意思是,我在哪里可以彻底学习 procs?

标签: ruby unit-testing sinatra minitest


【解决方案1】:

您可以使用puts last_response.errors 显示最后响应的机架错误消息。

【讨论】:

  • 非常感谢,现在我使用assert last_response.ok?, "Status 200 expected but was #{last_response.status}.\n#{last_response.errors.split("\n").first}",它在一行中显示了具体是什么导致了 500 错误。
  • 为什么?我只使用错误来调试愚蠢的错误。我不期望它们并在我通常的测试代码中使用它们。
  • 对,这里也一样。但是现在我遇到了用户创建操作的问题,sinatra 抱怨 ArgumentError,我认为这是一个愚蠢的错误。而且我希望能够在测试中检查它(2 for 3 或 1 for 3 等),而无需打开浏览器。无论如何,这让我不得不再次睁开眼睛和头脑。我的意思是,我尝试了 last_response.error 但毕竟没有错误。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2021-01-11
  • 2011-11-08
相关资源
最近更新 更多