【发布时间】:2023-03-11 06:38:02
【问题描述】:
我有一个简单的模型,它有一个after_save 回调,用于在状态更改时更新相关模型上的一些内容:
class Model < ApplicationRecord
has_many :related_records
after_update :check_change
enum :status { 'status1', 'status2'}
def check_change
return unless saved_change_to_status?
related_records.each(&:schedule_email)
end
现在我想用 Rspec 测试这个方法。我先测试了方法是否被调用,成功了:
it "should be called"
expect(subject).to receive(:check_change)
subject.save
end
现在我想检查每条相关记录是否收到schedule_email方法:
it 'should call method on related records' do
subject.update(status: 'status2')
subject.emails.each do |msg|
expect(msg).to receive(:schedule_email)
end
end
不知何故,这不起作用。在没有任何运气的情况下,我还尝试在期望之后调用update。我无法理解出了什么问题。有什么想法吗?
编辑:我还在方法中的保护子句之后创建了一个断点。在测试期间它停止执行,所以我假设 schedule_email 方法正在所有相关记录上被调用......我应该以不同的方式expect 吗?
【问题讨论】:
标签: ruby-on-rails rspec