8

Ich benutze Pusher für Facebook Style-Benachrichtigungen. Ich habe einen einfachen RSpec-Test eingerichtet, um zu testen, dass Pusher ausgelöst wird.So testen Sie Pusher mit 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 

Dieser Test besteht. Wenn ich jedoch einen anderen Test mit identischem Code mache (dasselbe zweimal testen), besteht der zweite Test nicht. Es spielt keine Rolle, ob ich den zweiten Test in die gleiche oder in eine andere Datei lege. Ich kann Pusher nur einmal testen.

Der Fehler, den ich für den zweiten Test bekommen ...

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

Antwort

0

Dies kann eine alte Frage, aber ich wollte, dass meine Antwort hinzuzufügen. Bei der Prüfung von Pusher mit RSpec zuvor in einer Rails-Anwendung, schrieben wir Feature-Spezifikationen wie folgt:

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 

Wir habe auch Pusher Künstlich, die ein gefälschter Pusher-Server für die Entwicklung ist und bei https://github.com/tristandunn/pusher-fake zur Verfügung zu testen.

"Bei der Ausführung wird ein kompletter gefälschter Dienst an zwei zufällig geöffneten Ports gestartet. Verbindungen können dann ohne Pusher-Account zum Dienst hergestellt werden. Der Host und der Port für den Socket und die Webserver finden Sie unter Aufbau." Somit können Sie tun:

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 

A ein Beispiel Repo diesen Ansatz zu zeigen, kann bei https://github.com/tristandunn/pusher-fake-example

finden