【问题标题】:RSpec Delayed Expectation Argument MatchersRSpec 延迟期望参数匹配器
【发布时间】:2016-03-08 08:16:03
【问题描述】:

我目前在控制器中有一些 Rails 代码,可以执行以下操作:

def update
  @local.update(...)
  @local.save!
  Exchange::publish_to_exchange('event-title', Serializer.new(@local).serializable_hash)
  render ...
end

我想测试该消息是否已使用正确的消息名称和序列化、更新的对象发布。所以,在控制器规范中我做了这样的事情:

let(:local) { create(:local_class) }

it 'publishes serialized version to exchange' do
  expect(Exchange).to receive(:publish_to_exchange).with('event-title', Serializer.new(local).serializable_hash)

  put :update, params
end

但是,这显然是行不通的,因为它将本地的未更新的、可序列化的哈希与更新的版本进行比较。我想知道在“put :update, params”行之后是否有延迟检查匹配器,以便我可以测试这种情况。

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    我想测试该消息是否已使用正确的消息名称和序列化、更新的对象发布...

    这并不适合控制器测试,因为发布发生在控制器操作范围之外。如果您需要为其编写单元测试,最好将该测试放在模型中或单独的单元中(例如从lib 加载的 PORO)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多