Rspec - 期望仅在方法存在时才接收

时间:2016-03-17 15:51:34

标签: ruby-on-rails ruby rspec

在rspec中,您可以使用instance_double来确保您的期望是有效的 - 换句话说,如果我有:

java.util.concurrent

我能做到

class Foo
  def bar
  end
end

我知道如果我从dbl = instance_double('Foo') expect(dbl).to receive(:bar) ... 中移除bar方法,我的测试会抛出错误,阻止我无声地破坏。

如何使用类方法实现同样的效果?我只是意外地导致了我的测试没有捕获的错误,因为我做了以下操作:

Foo

测试:

class Foo
  def self.bar
  end
end

没有出现任何错误,因为我通过上述期望添加了一个存根,但实际上该方法并不存在。我知道我可以expect(Foo).to receive(:baz) Foo.baz ,但class_double在我的代码的另一部分调用,而不是在我的测试中调用,因此我无法调用{{1}而不是实际的类。

1 个答案:

答案 0 :(得分:1)

您要做的是启用部分双重验证:

RSpec.configure do |config|
  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end
end

这会导致部分双打与通过object_double创建的双打具有相同的行为。

相关问题