8

Я использую Pusher для уведомлений в стиле facebook. Я установил простой тест RSpec, чтобы проверить, что Pusher запущен.Как проверить Pusher с RSpec

scenario "new comment should notify post creator" do 
    sign_in_as(user) 
    visit user_path(poster) 
    fill_in "comment_content", :with => "Great Post!" 
    click_button "Submit" 

    client = double 
    Pusher.stub(:[]).with("User-1").and_return(client) 
    client.should_receive(:trigger) 
end 

Этот тест проходит. Однако, если я сделаю еще один тест, используя идентичный код (дважды тестируя одно и то же), второй тест не проходит. Не имеет значения, поставил ли я второй тест в том же файле или другом. Я могу, по существу, только проверить Pusher один раз.

ошибка, что я получаю за второе испытание ...

Failure/Error: client.should_receive(:trigger) 
    (Double).trigger(any args) 
    expected: 1 time with any arguments 
    received: 0 times with any arguments 

ответ

0

Это может быть старый вопрос, но я хотел бы добавить свой ответ. При тестировании Pusher с RSpec ранее в приложении Rails, мы писали художественные функции следующим образом:

it "user can publish the question" do 
    expect_any_instance_of(Pusher::Client).to receive(:trigger) 
    visit event_path(event) 
    click_on 'Push Question to Audience' 
    expect(current_path).to eq question_path(@question) 
    expect(page).to have_content 'Question has been pushed to the audience' 
end 

Мы также использовали Pusher подделки, которую представляет собой поддельный Толкатель сервер для разработки и тестирования доступны на https://github.com/tristandunn/pusher-fake.

«При запуске запускается целая фальшивая услуга на двух случайных открытых портах. После этого соединения могут быть подключены к службе без необходимости учетной записи Pusher. Хост и порт для сокета и веб-серверов можно найти, конфигурация «. Затем это позволяет вам сделать:

require "rails_helper" 

feature "Server triggering a message" do 
    before do 
    connect 
    connect_as "Bob" 
    end 

    scenario "triggers a message on the chat channel", js: true do 
    trigger "chat", "message", body: "Hello, world!" 

    expect(page).to have_content("Hello, world!") 

    using_session("Bob") do 
     expect(page).to have_content("Hello, world!") 
    end 
    end 

    protected 

    def trigger(channel, event, data) 
    Pusher.trigger(channel, event, data) 
    end 
end 

пример репо, чтобы показать этот подход можно найти на https://github.com/tristandunn/pusher-fake-example