在 RSpec 中测试更新操作,结果为真,但测试失败?
Posted
技术标签:
【中文标题】在 RSpec 中测试更新操作,结果为真,但测试失败?【英文标题】:Testing an update operation in RSpec, evaluates to true, but test fails? 【发布时间】:2022-01-06 16:55:14 【问题描述】:我有这个测试:
it "saves the notification id in the referral for future reference" do
expect subject.perform(*args)
.to change(referral, :notification_id).from(nil).to(customer_notification_delivery.id)
end
它在上面运行的代码是:
if notification.present?
referral.update(friend_customer_notification_delivery_id: notification.id)
end
我添加了一些调试消息,以在触发测试后检查它们,以确保满足此条件,并且代码正在运行,我得到了 true
两者
p notification.present?
p referral.update(friend_customer_notification_delivery_id: customer_notification_delivery.id)
我缺少什么吗?为什么更新返回 true,但值在测试中没有得到更新?
我得到的输出:
expected #notification_id to have changed from nil to 5, but did not change
【问题讨论】:
【参考方案1】:您的测试中的referral
和您的被测对象中的referral
是两个不同的对象,我敢打赌。对其中一个的更改不会影响另一个。测试中的referral
不会神奇地从其他代码生成的相关数据库记录中提取更新。
我一般都是这样的
it "saves the notification id in the referral for future reference" do
expect subject.perform(*args)
.to change referral.reload.notification_id .from(nil).to(customer_notification_delivery.id)
end
【讨论】:
感谢@Sergio Tulentsev,我尝试仅使用 (referral.reload) 重新加载模型不起作用,使用您的方法(还添加属性)我得到了TypeError: nil is not a symbol nor a string
@queroga_vqz: 试试我的方法
没关系,我想念你也用括号把它改成了一个块。我的错,谢谢!以上是关于在 RSpec 中测试更新操作,结果为真,但测试失败?的主要内容,如果未能解决你的问题,请参考以下文章