레일 클래스 앱에 서비스 클래스가 있다고 가정 해 보겠습니다. 실제로 어떤 일을하는지는 중요하지 않지만 클라이언트에게 알림을 푸시하는 데 사용될 수 있다고 가정합니다.레일스 환경에서 서비스 클래스 분리하기
# lib/services/event_pusher.rb
class EventPusher
def initialize(client)
@client = client
end
def publish(event)
PusherGem.trigger(@client, event)
end
end
나는 지금 내 컨트롤러에서이 클래스를 사용할 수 있습니다 : 나는 publish
를 호출 할 때
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
지금이 서비스 클래스를 제 3 자에게 요청합니다. 나는 내 테스트를 실행할 때 그런 일이 일어나기를 원하지 않는다.
내가 보는 방법에는 두 가지 옵션이 있습니다.
옵션 1 : 나는 환경 검사와 EventPusher.trigger
모든 통화를 접미사에 기억해야
. 모든 앱 작성/업데이트/삭제 작업에서이를 호출 할 수 있음을 기억하십시오.
if @whatever.save
EventPusher.new(current_user).publish('whatever:saved') unless Rails.env.test?
end
옵션 2 :
나는 부부에 레일 내 서비스 클래스가 있습니다.
def publish(event)
PusherGem.trigger(@client, event) unless Rails.env.test?
end
올바른 옵션은 무엇입니까 (아니면 비밀 옵션 3이 있습니까?)?