我正在尝试对Rspec中的测试进行故障排除。我的程序代码按预期工作,但我的测试代码中存在问题。相关的rspec包含:
it "is invalid without a date" do
appointment = FactoryGirl.build(:appointment, date: "")
appointment.valid?
expect(appointment.errors[:date]).to include("can't be blank")
end
Rspec会产生以下错误:
Failure/Error: appointment.valid?
ArgumentError:
comparison of Date with nil failed
看来错误是由于我将日期字段留空以测试方案(即没有日期时无效)。如果将日期设置为nil或将其留空会产生错误,如何使用Rspec正确测试此方案?我研究了错误消息,但没有找到解决方案。处理问题的最佳方法是什么?
答案 0 :(得分:1)
您的验证方法是将Date
与nil
进行比较,从而产生错误。我无法解释您传入的空字符串被强制转换为nil
的位置,但您无法将Date
与字符串进行比较。您需要重新设计验证方法以适应所有潜在的date
值和/或在其前面添加其他验证(例如presence: true
)。一旦你这样做,你的测试应该能够运行。
答案 1 :(得分:1)
这是因为您的其他验证:
validate :past_dated_appointment
private
def past_dated_appointment
if Date.current > self.date
errors.add(:date, "can't be in the past")
end
end
您应该首先检查日期是否存在:
if self.date && Date.current > self.date