我在指定模型验证时遇到一些问题,该模型充当状态机(gem state_machine 0.9.4)。通过 stat_machine,我定义了对交付状态下的自行车的验证:
state :delivered do
validates_presence_of :shipping_number
end
在我的规格中,这是正确的:
it "may not transit to :delivered without a shipping number " do
@bike.state = 'delivered'
@bike.shipping_number = nil
@bike.save
@bike.should have(1).error_on(:shipping_number)
end
但是当这样指定时:
it "may not transit to :delivered without a shipping number " do
@bike.shipping_number = nil
@bike.deliver
@bike.should have(1).error_on(:shipping_number)
end
I get:
expected 1 error on :shipping_number, got 0
虽然
it "may not transit to :delivered without a shipping number " do
@bike.shipping_number = nil
@bike.deliver
raise @bike.errors.inspect
end
向我展示:
Failure/Error: raise @bike.errors.inspect
#<OrderedHash {:shipping_number=>["can't be blank"]}>
有人可以解释一下吗?
检查这里的链接,它解释了这个问题:http://web.archive.org/web/20130202082209/http://agaskar.com/post/1627270986/fun-state-machine-rspec-gotcha http://web.archive.org/web/20130202082209/http://agaskar.com/post/1627270986/fun-state-machine-rspec-gotcha
底线:失败的状态转换会导致回滚到之前的状态,现在 validates_presence_of 与以下错误检查无关。
虽然可能有一种更惯用的方法来做到这一点,但我在规范中做了类似的事情:
@bike.errors.include?(:shipping_number).should == true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)