aboutsummaryrefslogtreecommitdiffstats
path: root/guides/source/testing.md
diff options
context:
space:
mode:
authorVladimir Dementyev <dementiev.vm@gmail.com>2019-01-22 14:05:32 -0500
committerVladimir Dementyev <dementiev.vm@gmail.com>2019-01-22 15:14:20 -0500
commitdc80459a9e9a6088668f93c9f44be4c170193fb7 (patch)
tree64e73600542483afb863c03e5e8ee247c81d187d /guides/source/testing.md
parent1d359d4bf6775585b0a488678dac3d8b5ff9c634 (diff)
downloadrails-dc80459a9e9a6088668f93c9f44be4c170193fb7.tar.gz
rails-dc80459a9e9a6088668f93c9f44be4c170193fb7.tar.bz2
rails-dc80459a9e9a6088668f93c9f44be4c170193fb7.zip
Move `channel_name` to Channel.broadcasting_for
That would allow us to test broadcasting made with channel, e.g.: ```ruby class ChatRelayJob < ApplicationJob def perform_later(room, msg) ChatChannel.broadcast_to room, message: msg end end ``` To test this functionality we need to know the underlying stream name (to use `assert_broadcasts`), which relies on `channel_name`. We had to use the following code: ```ruby assert_broadcasts(ChatChannel.broadcasting_for([ChatChannel.channel_name, room]), 1) do ChatRelayJob.perform_now end ``` The problem with this approach is that we use _internal_ API (we shouldn't care about `channel_name` prefix in our code). With this commit we could re-write the test as following: ```ruby assert_broadcasts(ChatChannel.broadcasting_for(room), 1) do ChatRelayJob.perform_now end ```
Diffstat (limited to 'guides/source/testing.md')
-rw-r--r--guides/source/testing.md27
1 files changed, 27 insertions, 0 deletions
diff --git a/guides/source/testing.md b/guides/source/testing.md
index 1a2f480407..fb78fa6d17 100644
--- a/guides/source/testing.md
+++ b/guides/source/testing.md
@@ -1837,6 +1837,33 @@ class ProductTest < ActionCable::TestCase
end
```
+If you want to test the broadcasting made with `Channel.broadcast_to`, you shoud use
+`Channel.broadcasting_for` to generate an underlying stream name:
+
+```ruby
+# app/jobs/chat_relay_job.rb
+class ChatRelayJob < ApplicationJob
+ def perform_later(room, message)
+ ChatChannel.broadcast_to room, text: message
+ end
+end
+
+# test/jobs/chat_relay_job_test.rb
+require 'test_helper'
+
+class ChatRelayJobTest < ActiveJob::TestCase
+ include ActionCable::TestHelper
+
+ test "broadcast message to room" do
+ room = rooms[:all]
+
+ assert_broadcast_on(ChatChannel.broadcasting_for(room), text: "Hi!") do
+ ChatRelayJob.perform_now(room, "Hi!")
+ end
+ end
+end
+```
+
Additional Testing Resources
----------------------------