rspec .to接收(:method_name)正确用法

时间:2018-07-16 07:33:43

标签: ruby-on-rails rspec

精简代码:

class Object
  def foo
    (bar / 100).round(2)
  end

  def bar
    self.some_integer
  end
end

我想测试foo调用bar,以便我的规格看起来像这样

it 'calls #bar upon self' do
  expect(@object).to receive(:bar)
  @object.foo
end

不幸的是,该规范然后失败了,因为调用@object.foo#bar为nil并且除法失败。 #bar不可能返回之前确保的nil值。 如何正确测试呢?

1 个答案:

答案 0 :(得分:1)

您应该声明此测试期望哪个bar值:

expect(@object).to receive(:bar).and_return(10)

Docs

编辑

您还可以(感谢@meta):

expect(@object).to receive(:bar).and_call_original