测试强大的参数

时间:2014-05-30 23:22:29

标签: ruby-on-rails rspec strong-parameters

我想在rails控制器中测试我的强参数。到目前为止,我找到的最好方法是这里描述的方法:http://pivotallabs.com/rails-4-testing-strong-parameters/

不幸的是,这会导致"黑名单"测试:我只能测试某些参数是否被丢弃。我想做的是"白名单"测试:确保仅允许 某些参数。

我的想法是弄清楚模型的所有属性,将它们全部设置为某个值,然后将它们传递给类。然后我可以测试是否只有白名单参数通过。

不幸的是,我还没有找到一种方法来设置所有属性而不知道它们。有帮助吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上,在该文章的with块中,只有白名单元素。我的意思是:

User.should_receive(:create).
    with({name: 'Sideshow Bob'}.with_indifferent_access)

哈希{name: 'Sideshow Bob'}仅包含列出的白色。因此,它确切地检查允许某些参数。

BTW为什么有人需要测试黑名单参数,如果它们可以是什么?所有其他人都被列入黑名单。

答案 1 :(得分:1)

values = Model.new.attributes
values.each_key { |key| values[key] = 'abcdef' }
post :create, user: values

这将尝试发布给定模型的所有潜在属性,从那里您可以验证只发生了预期的行为。