2016-02-05 33 views
14

ActionCable kanallarını test etmeyi düşünüyorum.RSpec'i kullanarak ActionCable kanallarını nasıl test edebilirim?

ı aşağıdaki sohbet kanalı var diyelim: subscribed yöntem db günceller ve kanal arasında yayınlanmak üzere iki akışları tanımlar, ancak ayrıntılar benim sorum daha olduğundan çok önemli değildir

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 

genel bir:

  • nasıl bu kanal abone olarak katılan mantığı sınamak için bir test kurmak can?

RSpec, denetleyici eylemi gibi benzer etkileşimleri test ederken birçok yardımcı yöntem ve çeşitli yardımcı programlar sunar, ancak RSpec ve ActionCable ile ilgili herhangi bir şey bulabilirim.

cevap

3

yüklemek ve ('WebSockets için benzeri VCR') kayıt prizleri etkileşim için TCR gem yapılandırmak istiyorum

böyle bir şey görünebilir sizin durumunuzda bunun için bir Spec ...

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

ama test_case (ve yanılıyorsam beni düzeltin) VCR kullanarak (ve TCR benzer) anlamda sizi yapar Harici http istekleri (örneğin denetleyicimin eylemi bir dış çağrı yayınlarsa) koymayı ister, ancak buradaki durum bu değildir - burada sadece kendi iç yöntemlerimi çağırmak istiyorum. Ama bir kez daha - bu iyi bir fikir ve ben onu bir vereceğim. – Dani

+0

Hey Dani, bir çözüm buldunuz mu? Eğer öyleyse, kontrol edebildiğim bir repoya işaret edebilir misin? –

1

`action-cable-testing` gem işlevini kullanabilirsiniz.

gem 'action-cable-testing'
Sonra github repo readme bkz fazla bilgi için 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 

aşağıdaki
$ bundle install

Ardından eklemek çalıştırın Gemfile
Bu ekleyin.

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

Orada hem RSpec için örnektir ve

çok iyi bir fikir, sayende
+1

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir.- [Yorum Yaz] (/ review/düşük kaliteli yazılar/18680949) –

+1

@MaximilianPeters Şimdi daha okunabilir olduğunu düşünüyorum. – zhisme