Как проверить, запущен ли канал Pusher в модели ActiveRecord

У меня есть следующий метод в модели:

  def trigger_events_updated_push_event
    Pusher['events'].trigger('events_updated', {})
  end

У меня есть следующие спецификации:

   describe '#trigger_events_updated_push_event' do
      it 'should send message to Pusher' do
        Pusher['events'].should_receive(:trigger).with('events_updated', {})
        subject.send(:trigger_events_updated_push_event)
      end
    end

Который производит эту ошибку:

 Failure/Error: Unable to find matching line from backtrace
       (#<Pusher::Channel:0x007ff16f18ae58>).trigger("events_updated", {})
           expected: 1 time
           received: 0 times

Что я не могу сделать?

1 ответ

Решение

Сначала ваш код нуждается в улучшении. Вы жестко закодировали другой класс / константу в этом классе, что делает его тесно связанным.

Рефакторинг сначала

def trigger_events_updated_push_event(event=Pusher['event'])
  event.trigger('events_updated', {})
end
# This way you allow other kinds of event to be injected.

Тогда проверь.

it "fires event" do
  event = double
  event.stub(:trigger).with(anything)
  event.should_receive(:trigger).with('events_updated', {})
  subject.trigger_events_updated_push_event
end
# Your test is only about this Class and does not depend on Pusher at all.
Другие вопросы по тегам