have_broadcasted_to 匹配器

have_broadcasted_to(也称为 broadcast_to)匹配器用于检查消息是否已广播到给定的流。

背景

给定 action cable 测试可用。

检查流名称

给定 一个名为“spec/models/broadcaster_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe "broadcasting" do
  it "matches with stream name" do
    expect {
      ActionCable.server.broadcast(
        "notifications", { text: "Hello!" }
      )
    }.to have_broadcasted_to("notifications")
  end
end

我运行 rspec spec/models/broadcaster_spec.rb

那么 示例应该全部通过。

检查传递给流的消息

给定 一个名为“spec/models/broadcaster_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe "broadcasting" do
  it "matches with message" do
    expect {
      ActionCable.server.broadcast(
        "notifications", { text: "Hello!" }
      )
    }.to have_broadcasted_to("notifications").with(text: 'Hello!')
  end
end

我运行 rspec spec/models/broadcaster_spec.rb

那么 示例应该全部通过。

检查传递给流的消息是否匹配

给定 一个名为“spec/models/broadcaster_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe "broadcasting" do
  it "matches with message" do
    expect {
      ActionCable.server.broadcast(
        "notifications", { text: 'Hello!', user_id: 12 }
      )
    }.to have_broadcasted_to("notifications").with(a_hash_including(text: 'Hello!'))
  end
end

我运行 rspec spec/models/broadcaster_spec.rb

那么 示例应该全部通过。

使用块检查传递的消息

给定 一个名为“spec/models/broadcaster_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe "broadcasting" do
  it "matches with message" do
    expect {
      ActionCable.server.broadcast(
        "notifications", { text: 'Hello!', user_id: 12 }
      )
    }.to have_broadcasted_to("notifications").with { |data|
      expect(data['user_id']).to eq 12
    }
  end
end

我运行 rspec spec/models/broadcaster_spec.rb

那么 示例应该全部通过。

使用别名方法

给定 一个名为“spec/models/broadcaster_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe "broadcasting" do
  it "matches with stream name" do
    expect {
      ActionCable.server.broadcast(
        "notifications", { text: 'Hello!' }
      )
    }.to broadcast_to("notifications")
  end
end

我运行 rspec spec/models/broadcaster_spec.rb

那么 示例应该全部通过。

检查广播到记录

给定 一个名为“spec/channels/chat_channel_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe ChatChannel, type: :channel do
  it "matches with stream name" do
    user = User.new(42)

    expect {
      ChatChannel.broadcast_to(user, text: 'Hi')
    }.to have_broadcasted_to(user)
  end
end

以及 一个名为“app/models/user.rb”的文件,其中包含

class User < Struct.new(:name)
  def to_gid_param
    name
  end
end

我运行 rspec spec/channels/chat_channel_spec.rb

那么 示例应该通过。

检查在非频道规范中广播到记录

给定 一个名为“spec/models/broadcaster_spec.rb”的文件,其中包含

require "rails_helper"

RSpec.describe "broadcasting" do
  it "matches with stream name" do
    user = User.new(42)

    expect {
      ChatChannel.broadcast_to(user, text: 'Hi')
    }.to broadcast_to(ChatChannel.broadcasting_for(user))
  end
end

以及 一个名为“app/models/user.rb”的文件,其中包含

class User < Struct.new(:name)
  def to_gid_param
    name
  end
end

我运行 rspec spec/models/broadcaster_spec.rb

那么 示例应该通过。