私のレールアプリにサービスクラスがあるとしましょう。それが何をするかは問題ではありませんが、クライアントに通知をプッシュするために使用できると仮定しましょう。
# lib/services/event_pusher.rb
class EventPusher
def initialize(client)
@client = client
end
def publish(event)
PusherGem.trigger(@client, event)
end
end
コントローラーでこのクラスを使用できるようになりました。
require "lib/services/event_pusher"
class WhateverController < ApplicationController
def create
@whatever = Whatever.new(params[:whatever])
if @whatever.save
EventPusher.new(current_user).publish('whatever:saved')
end
end
end
を呼び出すと、このサービス クラスはサード パーティにリクエストを送信しますpublish
。テストを実行しているときにそれが発生したくありません。
私の見方では、2 つの選択肢があります。
オプション 1:
へのすべての呼び出しをEventPusher.trigger
環境チェックで後置することを覚えておく必要があります。アプリのすべての作成/更新/破棄アクションでこれを呼び出すことができることを思い出してください。
if @whatever.save
EventPusher.new(current_user).publish('whatever:saved') unless Rails.env.test?
end
オプション 2:
サービス クラスを Rails に結合する必要があります。
def publish(event)
PusherGem.trigger(@client, event) unless Rails.env.test?
end
正しいオプションはどれですか (または、秘密のオプション番号 3 はありますか)?