在rspec中我们可以关闭一个测试的verify_partial_doubles

时间:2014-10-13 03:41:29

标签: ruby-on-rails rspec mocking

我的项目在rspec_helper.rb文件中设置了此值

mocks.verify_partial_doubles = true  

我有一个被标记的测试

TaskPublisher does not implement #publish

问题是该对象在实例化之前不存在于该对象上。它是基于要发布的任务类型的模块导入。 (元编程)

所以我想知道是否有办法为特定测试关闭verify_partial_doubles,但不会影响其他具有该值的测试。

附带问题:没有将此标志设置为true会使BDD无法进行吗?在我看来,它在Mocking的面前随着它的定义而飞(https://stackoverflow.com/tags/mocking/info)。

2 个答案:

答案 0 :(得分:16)

  

[有没有]关闭特定测试的[verify_partial_doubles]的方法..?

RSpec> = 3.6

使用without_partial_double_verification

it 'example' do
  without_partial_double_verification do
    # ...
  end
end

http://rspec.info/blog/2017/05/rspec-3-6-has-been-released/

RSpec< 3.6

是的,user-defined metadataglobal "around hook"

# In your spec ..
describe "foo", verify_stubs: false do
  # ...
end

# In spec_helper.rb
RSpec.configure do |config|
  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.around(:each, verify_stubs: false) do |ex|
    config.mock_with :rspec do |mocks|
      mocks.verify_partial_doubles = false
      ex.run
      mocks.verify_partial_doubles = true
    end
  end
end

我相信这项技术可以归功于Nicholas Rutherfordrspec-rails issue #1076的帖子。

答案 1 :(得分:2)

我们最近遇到了类似的问题,最后还是这样:

config.mock_with :rspec do |mocks|
  mocks.verify_partial_doubles = true

  config.around(:example, :without_verify_partial_doubles) do |example|
    mocks.verify_partial_doubles = false
    example.call
    mocks.verify_partial_doubles = true
  end
end

非常类似于Jared Beck的回答,但是避免再次拨打mock_with