Cucumber с определениями таблиц и тестовыми / исходными данными

#ruby-on-rails #cucumber

#ruby-on-rails #cucumber

Вопрос:

У меня есть сценарий, подобный этому:

 Scenario:  Display some articles
  Given the following article pages:
    | title | body        |
    | test  | hello world |
  

Я видел, как некоторые люди создают xxx_steps.rb, а затем генерируют данные «на лету».

При запуске cucumber выполняется ли он по умолчанию с RAILS_ENV=test? Будет ли он загружать seeds.rb при каждом запуске со свежей тестовой базой данных? Если нет, то как я могу сделать так, чтобы это работало?

Кроме того, загружает ли cucumber все файлы в /step_definitions или существует какое-то соглашение о том, что он загружает любые файлы, соответствующие текущему файлу функций?

Ответ №1:

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

В этом случае у меня есть два массива имен (first_names и last_names), и я буду случайным образом создавать объекты Contact.

 FactoryGirl.define do

  factory :contact do
    name {"#{first_names.sample} #{last_names.sample}"}
    email  {"#{name.downcase.gsub!(' ', '.')}@example.com"}
    vat_number {rand(9999999).to_s.center(7, rand(9).to_s)}
    gender {['male', 'female'].sample}
    birth_date {Date.today - rand(200..40000)}
  end
end
  

Затем, чтобы создать контакт, мне просто нужно FactoryGirl.create(:contact) для одной записи.
Вы можете адаптировать этот пример к своим потребностям.

В вашем случае вы можете использовать свою таблицу следующим образом:

 Given /^the following article pages:$/ do |table|
   table.hashes.each do |hash|
   FactoryGirl.create(:article, hash
end