diff options
author | Vladimir Dementyev <dementiev.vm@gmail.com> | 2019-01-22 14:05:32 -0500 |
---|---|---|
committer | Vladimir Dementyev <dementiev.vm@gmail.com> | 2019-01-22 15:14:20 -0500 |
commit | dc80459a9e9a6088668f93c9f44be4c170193fb7 (patch) | |
tree | 64e73600542483afb863c03e5e8ee247c81d187d /guides | |
parent | 1d359d4bf6775585b0a488678dac3d8b5ff9c634 (diff) | |
download | rails-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')
-rw-r--r-- | guides/source/testing.md | 27 |
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 ---------------------------- |