Подтвердить что ты не робот

Данные семян в тестах на огурцы

Я пишу веб-приложение, в котором используется 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: очистить и повторно инициализировать его. Это хорошая практика?
4b9b3361

Ответ 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, которая описывает эти и другие примеры.