ruby-on-rails - RSpec:多次期待一条消息但参数不同

标签 ruby-on-rails ruby rspec

我目前对连续调用的模拟设置了一些期望:

规范:

@my_mock = mock("a_mock")
@options1 = {:some => "option"}
@options2 = {:some_other => "option"}
@first_param = mock("first_param")

@my_mock.should_receive(:a_message).with(@first_param, @options1)
@my_mock.should_receive(:a_message).with(@first_param, @options2)

但是,我得到以下信息:

Mock "a_mock" received :a_message with unexpected arguments
  expected: (#<Spec::Mocks::Mock:0x81b8ca3c @name="first_param"{:some => "option"})
   got: (#<Spec::Mocks::Mock:0x81b8ca3c @name="first_param">, {:some_other => "option"})

当我调试它时,第一个期望被调用。在我可以期待使用相同消息但参数不同的连续调用之前,我是否必须指定任何其他内容?

最佳答案

尝试将模拟创建为空对象以忽略额外的方法调用。您的每一个期望仍然必须得到满足,但它们不会相互踩踏。

@my_mock = mock("a_mock").as_null_object

这是在 Null Object 之后模式,其中任何无关的消息都被忽略。当您想确保使用某些参数调用方法时,它对模拟很有用,但您不关心它是否使用其他参数调用或是否调用任何其他方法。

关于ruby-on-rails - RSpec:多次期待一条消息但参数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785382/

相关文章:

ruby-on-rails - RailsAdmin : hstore columns don't show

iOS 使用参数获取对 Rails API 的请求

ruby - Gem :Module 的未定义方法 `searcher'

html - Ruby 和 Nokogiri 解析表?

ruby - 如何为在类加载时调用的类方法编写规范?

ruby-on-rails - 测试方法是否命中数据库

ruby-on-rails - 组合搜索范围时出错

ruby-on-rails - 使用 Active Record、Rails 和 Postgres 查找具有多个重复字段的行

ruby - rake 中止,不知道如何构建任务 'jobs:work'

ruby-on-rails - RSpec 测试自定义验证器