#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. Этот ответ должен быть принят. Да ладно, если вы собираетесь беспокоить кого-то, чтобы он вам помог, вы должны выполнить оценку правильных ответов.