我一直在用RSpec写测试。
当我执行valid?
方法时,它会删除对象拥有的错误消息。
我无法理解为什么会这样。
这是RSpec或Ruby特有的行为吗?
如果是这样的话,我应该如何解决它呢?
我经常看到类似的测试用例,
it"isinvalidwithoutafirstname"do
contact = Contact.new(firstname: nil)
contact.valid?
expect(contact.errors[:firstname]).not_to include("can't be blank")
end
为什么在此示例中他们在contact.valid
之前使用expect
?
plan = Plan.new(
xxx_id: xxx_id,
amount: amount,
currency: currency,
interval: interval,
name: name,
description: description
)
return plan unless plan.valid?
begin
XXX::Plan.create(
id: xxx_id,
amount: amount,
currency: currency,
interval: interval,
name: name
)
rescue XXX::XXXError => e
plan.errors[:base] << e.message
return plan
end
plan.save && plan
这是该方法的一部分。
我是红宝石的新手。我应该以{{1}}以红宝石的方式放置save
吗?
答案 0 :(得分:0)
contact
不会出现错误。只是初始化一个实例不会给它一个错误。在联系人致电.save
或.create
之前,错误对象不会被填充。
答案 1 :(得分:0)
在上一个示例中,您调用Plan.create
而不将其分配给任何变量。但是当异常抛出时,您会向包含有效模型对象的变量plan
添加错误。
答案 2 :(得分:0)
您是否在调用“有效?”后设置了间隔值?因为plan.errors告诉你间隔时间丢失了,但是在你检查之前它就在那里。
“有效?”清除所有错误,然后运行验证,因此,当您运行“valid?”时,interval不为空并且验证通过,这是预期的行为,如果有任何错误,则会填充错误,但如果存在错误,则错误将是空白
你发布的规范是完全正常的,你有一个无效状态的对象(名字是零)这么有效吗?在该字段上添加错误(也可以测试“expect(contact).to be_invalid”)