#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