You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中测试broadcasts_refreshes断言失败,如何解决?

问题:能否在ActiveJob或模型测试中测试broadcasts_refreshes?

能否在ActiveJob测试或模型测试中测试broadcasts_refreshes?或者是否有其他合适的测试位置?

根据Broadcastable文档(重点为提问者自加):

broadcasts_refreshes配置模型向运行时通过stream符号调用生成的流名广播「页面刷新」信号

ActionCable测试工具均要求指定流名,但未说明如何获取生成的流名,查看Broadcastable源码后发现,broadcasts_refreshes当前使用model_name.plural生成流名。

随后尝试使用assert_broadcasts(stream, number, &block)方法,传入model_name.plural的字符串结果(场景中为"salesforce_contacts"),但两种测试场景下均失败,提示:

1 broadcasts to salesforce_contacts expected, but 0 were sent.

后台任务测试代码

# Testing the background job
require "test_helper"

class UpdateSFContactJobTest < ActiveJob::TestCase
  include ActionCable::TestHelper
  
  test "broadcasts refresh message on change" do
    contact = salesforce_contacts(:one)
  
    assert_broadcasts(contact.model_name.plural, 1) do
      UpdateSFContactJob.perform_now(contact)
    end
    #Assertion fails: 1 broadcasts to salesforce_contacts expected, but 0 were sent.
  end
end

模型测试代码

# Testing the model
require "test_helper"

class Salesforce::ContactTest < ActiveSupport::TestCase
  include ActionCable::TestHelper

  test "broadcasts refresh after change" do
    contact = salesforce_contacts(:one)

    assert_broadcasts(contact.model_name.plural, 1) do
      contact.save
    end
    #Assertion fails: 1 broadcasts to salesforce_contacts expected, but 0 were sent.
  end
end

模型代码摘要

class Salesforce::Contact < ApplicationRecord
  include Mappable

  belongs_to :user

  broadcasts_refreshes

  permit_unexpected_attributes

  has_attribute_mappings Id: :salesforce_id,
    AccountId: :account_id,
    npsp__Deceased__c: :deceased,
    Name: :combined_name
    #snip
end

内容的提问来源于stack exchange,提问作者Matthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:40