2016-02-05 19 views
14

Mi chiedo come testare i canali ActionCable.Come posso testare i canali ActionCable usando RSpec?

Diciamo che ho il seguente canale di chat:

class ChatChannel < ApplicationCable::Channel 
    def subscribed 
    current_user.increment!(:num_of_chats) 

    stream_from "chat_#{params[:chat_id]}" 
    stream_from "chat_stats_#{params[:chat_id]}" 
    end 
end 

Il metodo subscribed aggiorna il db e definisce due flussi per essere trasmesso attraverso il canale, ma i dettagli non sono molto importante dal momento che la mia domanda è un altro generale:

  • Come è possibile impostare un test per verificare la logica coinvolta iscrivendosi a questo canale?

RSpec fornisce molti metodi di supporto e varie utilità per testare interazioni simili come l'azione del controller, ma ho potuto trovare qualsiasi cosa riguardante RSpec e ActionCable.

risposta

3

vorrei installare e configurare TCR gem per l'interazione prese di registrazione ('il suo videoregistratore come ad WebSockets')

una specifica per questo nel tuo caso potrebbe essere simile a questa ...

describe ChatChannel do 
    context ".subscribed" do 
    it "updates db and defines opens 2 streams for one channel" do 
     TCR.use_cassette("subscribed_action") do |cassette| 
     # ... 
     ChatChannel.subscribed 
     expect(cassette).to include "something ..." 
     end 
    end 
    end 
end 
+2

Questa è una buona idea, grazie, ma (e correggetemi se sbaglio) utilizzando VCR (e TCR analogamente) ha un senso quando si voglio bloccare le richieste http esterne (ad esempio se l'azione del mio controller emette una chiamata esterna), ma questo non è il caso qui - qui voglio solo invocare i miei metodi interni. Ma ancora una volta - è una buona idea e ci provo. – Dani

+0

Hey Dani, hai trovato una soluzione? Se sì, potresti indicare un repo che potrei controllare? –

1

È possibile utilizzare la gemma `action-cable-testing`.

Aggiungi questo al vostro Gemfile
gem 'action-cable-testing'
Poi gestita
$ bundle install

Quindi aggiungere seguente spec

# spec/channels/chat_channel_spec.rb

require "rails_helper" 

RSpec.describe ChatChannel, type: :channel do 
    before do 
    # initialize connection with identifiers 
    stub_connection current_user: current_user 
    end 

    it "rejects when no room id" do 
    subscribe 
    expect(subscription).to be_rejected 
    end 

    it "subscribes to a stream when room id is provided" do 
    subscribe(chat_id: 42) 

    expect(subscription).to be_confirmed 
    expect(streams).to include("chat_42") 
    expect(streams).to include("chat_stats_42") 
    end 
end 

Per ulteriori informazioni vedere readme in github pronti contro termine.

https://github.com/palkan/action-cable-testing

ci sono esempi sia per RSpec e test_case

+1

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.- [Dalla recensione] (/ recensione/post di bassa qualità/18680949) –

+1

@MaximilianPeters Penso che sia più leggibile ora. – zhisme

Problemi correlati