如何在 Rails 测试中测试 params 哈希?

Posted

技术标签:

【中文标题】如何在 Rails 测试中测试 params 哈希?【英文标题】:How do you test the params hash in a Rails test? 【发布时间】:2011-10-01 11:08:35 【问题描述】:

以下会产生错误:“未定义的局部变量或方法`params'”

assert_equal params[:recipient_id], users(:one).id

如何测试 params 哈希?

另外,当有参数存在时,你如何测试assert_redirect?参数附加到 URL,因此对 model_path 或类似的测试失败。

使用 Rails 3 中的内置测试类。

【问题讨论】:

@B 七:为什么要测试 params 哈希中的内容?我知道,这是一个令人讨厌的问题,但对我来说,想要测试这样的东西似乎很奇怪。更重要的是控制器正在检索正确的对象。 @Samo 我不确定这是否是一个正当的理由,但我有一个控制器操作可以合并时间字段和日期字段(我将它们作为单独的字段),以防出错, 确保字段被正确地取消合并以便它们在用户看来与最初发送时一样是有意义的。您对此有何看法? 【参考方案1】:

http://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers 提供了其中的一些信息。

在这种情况下,params 附加到 @request@response 对象(取决于您正在测试的 HTTP 方法),因此您可以将其称为 @request.params[:recipient_id]

对于重定向: assert_redirected_to post_path(assigns(:post)) 将断言您被重定向到给定模型的正确路径。 assigns 方法应该将您在控制器内部设置的实例变量传递给视图

【讨论】:

以上是关于如何在 Rails 测试中测试 params 哈希?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails/RSpec 中测试异常引发?

由于符号而不是 Rails 导致哈希失败的 RSpec 测试

Ruby on Rails:删除多个哈希键

Rails rspec控制器测试返回一个未知的哈希值

Rails/Rspec:测试延迟作业邮件

在 Rails 中过滤敏感信息(参数)的测试