Данные семян в тестах на огурцы
Я пишу веб-приложение, в котором используется SaS. Каждый клиент имеет свой собственный каталог db и app, поэтому у меня есть задача rake, которая создает все необходимые минимальные данные (исходные данные) для запуска их веб-сайта: права и роли по умолчанию, пользователь superadmin, уже заполненная таблица "us_states", некоторые локальные депо и терминалы (это приложение для логистики).
У меня нет сценариев огурца, и я только начал создавать некоторые. Я новичок с огурцом.
Сначала я поставил задачу данных семени в заданную строку, но это в значительной степени относится ко всем сценариям, и это не имеет особого смысла для не-программистов, которые смотрят на сценарии (для людей это такой, что его не нужно выражать сознательно), поэтому я переместил его в hooks.rb.
Мой первый сценарий выглядит следующим образом:
1 Feature: Place an order
2 In order to keep orders in the database
3 As a admin
4 I want to place orders
5
6 Scenario: Using common legs
7 Given I have 1 customers
8 And I'm on the homepage
9 And I follow "Place an Order"
10 When I select the customer
11 And I select the SSLine
12 And I click "Use Common Legs"
13 Then I should see "PICKUP AT"
14 And I should see "DELIVER TO" or "LOAD AT"
15 And I should see EMPTY RETURN
Мои hooks.rb выглядят следующим образом:
1 Before do
2 MinimumData.new('costi', '1234').populate #username and password
3 end
Вопросы:
- Я не хочу запускать эту задачу MinimumData.populate перед каждым сценарием, потому что она занимает 8 секунд. Должен ли я заставить его работать один раз, глобально? Как?
- Нужно ли очищать базу данных с помощью команды After.do? Я действительно не хочу этого делать, потому что я буду дублировать логику в After.do, только с операторами Model.delete_all. Я заметил, что после моего первого запуска тестовый db имеет все эти данные. Я могу очистить его с помощью rake db: test: очистить и повторно инициализировать его. Это хорошая практика?
Ответы
Ответ 1
Я не знаю эквивалента before(:all)
в огурце. Что вы можете сделать, это добавить свое семя в файл, скажем features/support/seeds.rb
, а затем вверху вашего features/support/env.rb
и под строкой, для которой требуется environment.rb
поставить строку:
require File.dirname(__FILE__) + '/seeds'
или, альтернативно,
#just write the code you want to execute directly into the env.rb file
Это ваши доступные блоки для добавления в env.rb
Before do
#this code is run before each scenario
end
after do
#this code is run after each scenario
end
at_exit do
#this code is run at the end
end
Ответ 2
Одна поправка к Джеффу Ланотте отвечает. Это должно быть
Before do
# this code is run before each scenario
end
с капиталом B.
Вместо того, чтобы помещать этот вид кода в ваш файл env.rb, вы можете поместить его в новый файл в свой каталог функций/поддержки, например. файл "hooks.rb". Это связано с тем, что файл env.rb автоматически восстанавливается, если вы обновляете ребра огурца.
Дополнительная информация здесь: https://github.com/cucumber/cucumber/wiki/Hooks
Ответ 3
У Джеффа Ланотта есть ответ. Я просто добавлю ссылку на страницу wiki на Cucumber hooks, которая описывает эти и другие примеры.