rails/actioncable/CHANGELOG.md
Alex Ghiculescu c3c8abfbd7 assert_broadcasts: return the messages that were broadcast
This PR is similar to https://github.com/rails/rails/pull/47025, it makes Action Cable's `assert_broadcasts` return the messages that were broadast. This way you can do more analysis on them:

```ruby
    messages = assert_broadcasts("test", 2) do
      ActionCable.server.broadcast "test", { message: "one" }
      ActionCable.server.broadcast "test", { message: "two" }
    end
    assert_equal 2, messages.length
    assert_equal({ "message" => "one" }, messages.first)
    assert_equal({ "message" => "two" }, messages.last)
```

This is helpful if you expect lots of messages to be broadcast or if you want to only match on some element of the data; `assert_broadcast_on` doesn't work well in either of those scenarios.
2023-03-28 11:49:28 -06:00

2.5 KiB

  • assert_broadcasts now returns the messages that were broadcast.

    This makes it easier to do further analysis on those messages:

    message = assert_broadcasts("test", 1) do
      ActionCable.server.broadcast "test", "message"
    end
    assert_equal "message", message
    
    messages = assert_broadcasts("test", 2) do
      ActionCable.server.broadcast "test", { message: "one" }
      ActionCable.server.broadcast "test", { message: "two" }
    end
    assert_equal 2, messages.length
    assert_equal({ "message" => "one" }, messages.first)
    assert_equal({ "message" => "two" }, messages.last)
    

    Alex Ghiculescu

  • Display broadcasted messages on error message when using assert_broadcast_on

    Stéphane Robino

  • The Action Cable client now supports subprotocols to allow passing arbitrary data to the server.

    const consumer = ActionCable.createConsumer()
    
    consumer.addSubProtocol('custom-protocol')
    
    consumer.connect()
    

    See also:

    Guillaume Hain

  • Redis pub/sub adapter now automatically reconnects when Redis connection is lost.

    Vladimir Dementyev

  • The connected() callback can now take a {reconnected} parameter to differentiate connections from reconnections.

    import consumer from "./consumer"
    
    consumer.subscriptions.create("ExampleChannel", {
      connected({reconnected}) {
        if (reconnected) {
          ...
        } else {
          ...
        }
      }
    })
    

    Mansa Keïta

  • The Redis adapter is now compatible with redis-rb 5.0

    Compatibility with redis-rb 3.x was dropped.

    Jean Boussier

  • The Action Cable server is now mounted with anchor: true.

    This means that routes that also start with /cable will no longer clash with Action Cable.

    Alex Ghiculescu

  • ActionCable.server.remote_connections.where(...).disconnect now sends disconnect message before closing the connection with the reconnection strategy specified (defaults to true).

    Vladimir Dementyev

  • Added command callbacks to ActionCable::Connection::Base.

    Now you can define before_command, after_command, and around_command to be invoked before, after or around any command received by a client respectively.

    Vladimir Dementyev

Please check 7-0-stable for previous changes.