Как проверить, запущен ли канал 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.