How can I test ActionCable channels using RSpec?

You probably want to wait* for https://github.com/rails/rails/pull/23211 to be merged. It adds ActionCable::TestCase. Once that's merged, expect the rspec-rails team to do its part: https://github.com/rspec/rspec-rails/issues/1606

* Waiting is optional; You can not wait and based your own work on this "work in progress" and find a solution that works right now.


You can use `action-cable-testing` gem.

Add this to your Gemfile
gem 'action-cable-testing'
Then run
$ bundle install

Then add following 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

For more information see readme in github repo.

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

There are examples for both rspec and test_case