2016-08-04 4 views
1

У меня есть метод в моем application controller и хочу использовать его везде в моих спецификациях интеграции.Rspec использовать метод контроллера приложений

Я не хочу, чтобы добавить его метод в каждой спецификации

В настоящее время я использую

allow_any_instance_of(ApplicationController).to receive(:set_seo).and_return('seo_text') 

, но это неудобно.

Что мне делать?

ответ

1

В вашем Rspec конфигурации вы можете настроить до и после блока для:

перед тем набором

перед всеми

перед каждым

после каждого

после всех

после набора

https://www.relishapp.com/rspec/rspec-core/v/2-2/docs/hooks/before-and-after-hooks

В таком порядке.

Я хотел бы предложить:

RSpec.configure do |config| 
    config.before(:suite) do 
    allow_any_instance_of(ApplicationController).to receive(:set_seo).and_return('seo_text') 
    end 
end 

Edit:

Оказывается, что before(:suite) может вызвать проблемы.

Если это не работает для вас использовать before(:each)

+0

'before (: each)' отлично работает. – user

0

Я хотел бы создать spec_helper_integration файл и положить функциональность, специфичную для интеграции спецификации там.

У вас должно быть уже require 'rails_helper' в верхней части всех ваших спецификаций. В верхней части вашей интеграции спецификации говоря:

require 'rails_helper' 
require 'spec_helper_integration' 

Затем создайте spec_helper_integration.rb файл в той же папке, что и файл rails_helper.rb.

spec_helper_integration:

#I'm taking a guesstimate as to your integration spec configuration, but it's 
#likely something like the following line: 

#don't also have this in your spec_helper or rails_helper files: 
require 'capybara/rails' 

#configure your integration specs: 
RSpec.configure do |config| 
    config.before(:each) do 
    allow_any_instance_of(ApplicationController).to receive(:set_seo).and_return('seo_text') 
    end 
end 

Это хорошая практика, чтобы изолировать код, где это требуется только; делая это, ваш stubbing метода ApplicationController активируется только во время работы ваших спецификаций интеграции, а не с вашими другими спецификациями, например, с параметрами устройства или контроллера.

Перемещение вперед, любой дополнительный код, специфичный для интеграции, также должен быть помещен в ваш файл spec_helper_integration.

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