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

baa*_*h05 12 rspec ruby-on-rails mocking

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

mocks.verify_partial_doubles = true  
Run Code Online (Sandbox Code Playgroud)

我有一个被标记的测试

TaskPublisher does not implement #publish
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jar*_*eck 19

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

RSpec> = 3.6

使用 without_partial_double_verification

it 'example' do
  without_partial_double_verification do
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

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

RSpec <3.6

是的,使用用户定义的元数据全局"周围挂钩":

# 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
Run Code Online (Sandbox Code Playgroud)

我相信这项技术的功劳归功于他在rspec-rails问题#1076中的帖子Nicholas Rutherford.