【问题标题】:RSpec: Expecting a message multiple times but with differing parametersRSpec:多次期待一条消息,但参数不同
【发布时间】:2009-11-23 19:23:30
【问题描述】:

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

规格:

@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"})

当我调试它时,第一个期望被调用。我是否必须指定其他任何内容才能预期具有相同消息但参数不同的连续调用?

【问题讨论】:

  • 当我尝试您的示例时,它对我来说效果很好。您正在运行哪个版本的 Ruby 和 RSpec?

标签: ruby-on-rails ruby rspec


【解决方案1】:

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

@my_mock = mock("a_mock").as_null_object

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

【讨论】:

  • 这确实有帮助。但是我不确定这是在做什么。你能解释一下吗?
  • 我用一些关于空对象的额外信息更新了我的答案。我不是模式或测试专家,但我希望能有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2014-07-18
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多