我想在rails控制器中测试我的强参数。到目前为止,我找到的最好方法是这里描述的方法:http://pivotallabs.com/rails-4-testing-strong-parameters/
不幸的是,这会导致"黑名单"测试:我只能测试某些参数是否被丢弃。我想做的是"白名单"测试:确保仅允许 某些参数。
我的想法是弄清楚模型的所有属性,将它们全部设置为某个值,然后将它们传递给类。然后我可以测试是否只有白名单参数通过。
不幸的是,我还没有找到一种方法来设置所有属性而不知道它们。有帮助吗?
谢谢!
答案 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
这将尝试发布给定模型的所有潜在属性,从那里您可以验证只发生了预期的行为。