测试验证电子邮件的存在失败与shoulda,与工厂女孩通过

时间:2013-07-24 14:54:16

标签: ruby-on-rails unit-testing rspec factory-bot shoulda

我正在测试更新时用户模型上不需要电子邮件。

使用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

有人对这种差异发生的原因有任何疑问吗?

1 个答案:

答案 0 :(得分:2)

我认为这就是正在发生的事情。

should_not测试使用User.new的隐式主题。要对此主题进行update测试,必须首先将其保存,但由于create上的验证,保存会导致错误。解决方法是创建/保存有效的用户对象并在该对象上显式调用should_not validate_presence_of(...).on(:update)

请参阅相关的Shoulda: Test validates_presence_of :on => :update