モデル内のコールバック、特にレコードの作成によってトリガーされるコールバックの存在をどのようにテストできますafter_create
かafter_commit on: :create
?
呼び出す (空の) メソッドを使用したコールバックの例を次に示します。
# app/models/inbound_email.rb
class InboundEmail < ActiveRecord::Base
after_commit :notify_if_spam, on: :create
def notify_if_spam; end
end
RSpec 3 を使用した保留中の仕様を次に示します。
# spec/models/inbound_email_spec.rb
describe InboundEmail do
describe "#notify_if_spam" do
it "is called after new record is created"
end
end
メッセージの期待値を使用して、メソッドが呼び出されたことをテストする方法のようです。例えば:
expect(FactoryGirl.create(:inbound_email)).to receive(:notify_if_spam)
しかし、それはうまくいきません。もう 1 つの方法は、レコードが作成されたときに、呼び出されたメソッド内で何かが発生することをテストすることです (たとえば、電子メールの送信、メッセージのログ記録)。これは、メソッドが呼び出されたため、コールバックが存在することを意味します。ただし、実際には何か他のもの (送信された電子メール、ログに記録されたメッセージ) をテストしているので、ずさんな解決策を見つけたので、そのような解決策を探していません。