2014-10-13 3 views
8

Мой проект имеет это значение, установленное в файле rspec_helper.rbВ RSpec мы можем отключить verify_partial_doubles для одного теста

mocks.verify_partial_doubles = true 

У меня есть тест, который становится помечена

TaskPublisher does not implement #publish 

Проблема в том что этот метод не существует на объекте до момента его создания. Это импорт модуля, основанный на типе задачи, подлежащей публикации. (мета-программирование)

Так что мне интересно, есть ли способ отключить verify_partial_doubles для конкретного теста, но не повлиять на другие тесты, которые имеют значение.

Боковой вопрос: Не установлен ли этот флаг для истины, сделать BDD невозможным? Мне кажется, что он летит перед лицом Mocking, как он определен (https://stackoverflow.com/tags/mocking/info).

ответ

6

[Есть ли] способ отключить [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

Y эс, с 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.

0

Мы столкнулись с подобной проблемой в последнее время, и в конечном итоге происходит с этим:

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 

Очень похоже на ответ Джаред Бека, но избежать второй вызов mock_with.

Смежные вопросы