Очистка переменных shared_context в rspec - PullRequest
0 голосов
/ 06 апреля 2020

Я использую RSpec.shared_context для установки переменных, которые будут использовать все описанные блоки.

Что-то вроде этого

RSpec.shared_context "common" do 
  let(:name) { #creates a database object }
   #more let statements
end

Теперь я вызываю его из блока описания следующим образом:

describe "common test" do 
  include_context "common"
  #run few tests
end

Теперь, после запуска блока описания, я хочу очистить его. Как откатить все объекты, созданные в общем контексте?

Я попытался очистить его в хуке after(:context), но поскольку это оператор let, переменная name разрешена только внутри примеров.

Можно ли как-нибудь использовать use_transactional_fixtures, чтобы убрать это после выполнения тестов в блоке описания.

1 Ответ

1 голос
/ 06 апреля 2020

Вам не нужно беспокоиться об очистке своих «запросов», если вы просто правильно настроили свой набор тестов для очистки базы данных.

Используйте let, чтобы определить запомнившийся вспомогательный метод. Значение будет кэшировано для нескольких вызовов в одном и том же примере, но не для всех примеров.

Обратите внимание, что let вычисляется лениво: оно не оценивается, пока в первый раз не будет вызван определенный им метод.

Почти в каждом случае вы хотите, чтобы разрыв происходил автоматически и в каждом примере. Это то, что делает config.transactional_fixtures - он откатывает базу данных после каждого примера, чтобы у вас был свободный sh планшет и не возникало проблем с тестовым заказом. Полагаться на каждый пример / контекст независимо от того, чтобы явно очистить себя, - это всего лишь рецепт для неудачи.

...