我的项目在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)。
答案 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 metadata和global "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 Rutherford中rspec-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
。