需要帮助排除失败的Rspec测试 - 参数错误:Date与nil的比较

时间:2015-01-15 02:07:14

标签: ruby-on-rails ruby testing rspec

我正在尝试对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正确测试此方案?我研究了错误消息,但没有找到解决方案。处理问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您的验证方法是将Datenil进行比较,从而产生错误。我无法解释您传入的空字符串被强制转换为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