tl; dr验证在浏览器中有效,但是在rspec中失败。我不确定原因。
回答:我试图批量分配user_id,但user_id不能批量分配。在控制器中正确构建它,在rspec中不正确。
这是我的清单模型。每个商家信息都有一个价格和与之相关的user_id。
在我的"列表"模特,我有"价格"。
在我的"用户" model我有一个名为" vip"。
的布尔属性"价格"的最大值取决于用户的VIP状态。如果VIP,最高价格为400.否则,最高价格为200。
我写了一个方法" listing_ceiling"应该返回正确的最大值,具体取决于用户的VIP值。
它可以在浏览器中运行,但是当我运行我的测试时,rspec会返回错误:
undefined method `vip?' for nil:NilClass
我不确定我在这里的地方不足。它在浏览器中正常工作,但在使用rspec进行测试时失败。这是代码:
validates_numericality_of :price, :presence => true, :greater_than => 10, :less_than => :listing_ceiling
def listing_ceiling
if self.user.vip?
400.01
else
200.01
end
end
为什么会以这种方式失败的任何想法?
答案 0 :(得分:1)
您应该检查RSpec,问题不在于您的自定义验证方法,而在于您的测试设置。由于错误消息指出user == nil
!
答案 1 :(得分:1)
Listing#user
返回nil
。可能有两个问题。
user_id
的外键nil
为Listing
。 OR user_id
列中的值。但是没有User
具有该ID。解决方案是将用户分配到您的商家信息。