точная настройка rspec перед

#ruby #rspec

#ruby #rspec

Вопрос:

В Rspec мы можем настроить некоторое глобальное поведение до / после, подобное этому:

 config.before(:each) {blah...}
  

Я могу сказать:

 config.before(:each, :type => :model) {blah...}
  

Чтобы этот блок выполнялся только с модельными тестами
Но это не сработало бы:

 config.before(:each, :type => [:model, :controller]) {blah...}
  

Я должен повторить одно и то же дважды, один для модели и один для контроллера. Есть ли какой-либо другой способ сделать это? Спасибо

Ответ №1:

Смотрим на фильтры RSpec: https://www.relishapp.com/rspec/rspec-core/docs/hooks/filters

Они просто соответствуют любым произвольным метаданным, а rspec-rails добавляет метаданные :type => :model (или что угодно) к каждому набору тестов.

Итак, эта конфигурация

 config.before(:each, :type => [:model, :controller]) {blah...}
  

будут соответствовать только тестам с этими метаданными (совпадающими с тем же значением):

 describe "matching tests", :type => [:model, :controller] {blah...}
  

Что в основном означает, что ответ на ваш вопрос — НЕТ.

В любом случае, вы могли бы легко сделать это с помощью чего-то подобного:

 before_controller_and_model = lambda do
  do_stuff
end

config.before(:each, :type => :model)      { before_controller_and_model.call }
config.before(:each, :type => :controller) { before_controller_and_model.call }
  

Комментарии:

1. Этот ответ должен быть принят. Да ладно, если вы собираетесь беспокоить кого-то, чтобы он вам помог, вы должны выполнить оценку правильных ответов.