我正在测试更新时用户模型上不需要电子邮件。
使用FactoryGirl:
u = FactoryGirl.create(:user)
u.email = nil
expect(u.save).to be_true
测试通过。
用shoulda:
should_not validate_presence_of(:email).on(:update)
测试失败,错误:
Failure/Error: should_not validate_presence_of(:email)
Did not expect errors to include "can't be blank" when email is set to nil, got error: can't be blank
有人对这种差异发生的原因有任何疑问吗?
答案 0 :(得分:2)
我认为这就是正在发生的事情。
should_not
测试使用User.new
的隐式主题。要对此主题进行update
测试,必须首先将其保存,但由于create
上的验证,保存会导致错误。解决方法是创建/保存有效的用户对象并在该对象上显式调用should_not validate_presence_of(...).on(:update)
。