针对质量分配的测试

rec*_*nym 5 unit-testing rspec ruby-on-rails factory-bot

也许这不是需要测试的东西,但我正在学习所以我认为测试到最大值是不对的.

我有几个测试都会产生预期的结果,除了一个.我找到了一种解决方法,但我想知道正确的方法是什么.

当我在rails控制台中测试保存时,它不会从params散列中保存admin字段,这正是我所期望的.当我使用工厂构建然后保存它时,验证通过/失败.当我测试防止质量分配时,测试失败(因为它设置了我希望它不会的管理字段)

有任何想法,建议或顾虑吗?

谢谢

模型:

class User ...
  #id, name, email, admin(int)
  attr_accesible :name, email
  ...
end
Run Code Online (Sandbox Code Playgroud)

user_spec

it "should not have an admin after a mass save" do
  user = Factory.build(:user)
  user.save
  user.admin.should be_nil    #its not nil, its 0     
end
Run Code Online (Sandbox Code Playgroud)

工厂

Factory.define :user do |f|
  f.name "rec_acro"
  f.email "rec@acro.com"
  f.admin 0
end
Run Code Online (Sandbox Code Playgroud)

Pet*_*own 13

您可以在rspec之上使用Shoulda来获得简洁的质量分配规范:

describe User do
  it { should_not allow_mass_assignment_of(:admin) }
end
Run Code Online (Sandbox Code Playgroud)

  • 是的,但由于OP已经在使用rspec,我只是指出它们可以一起使用. (5认同)