我有一个模型Lead和一个回调函数:after_commit :create, :send_to_SPL
我使用的是Rails-4.1.0、ruby-2.1.1和RSpec。
1)这个测试未通过:
context 'callbacks' do
it 'shall call \'send_to_SPL\' after create' do
expect(lead).to receive(:send_to_SPL)
lead = Lead.create(init_hash)
p lead.new_record? # => false
end
end
2) 这个规格也没有通过:
context 'callbacks' do
it 'shall call \'send_to_SPL\' after create' do
expect(ActiveSupport::Callbacks::Callback).to receive(:build)
lead = Lead.create(init_hash)
end
end
3)这个测试通过了,但我认为它没有在 after_commit 回调函数中进行测试:
context 'callbacks' do
it 'shall call \'send_to_SPL\' after create' do
expect(lead).to receive(:send_to_SPL)
lead.send(:send_to_SPL)
end
end
Rails中测试after_commit回调的最佳方法是什么?
on: :update
定义,则无法在4.2.7
上工作。在运行回调之前,我还需要执行subject.instance_variable_get(:@_start_transaction_state)[:new_record]=false
以使其正常工作。 - Dmitriy Budnik