Предположим, я хочу запустить тест и создать много Student
. Каждый ученик принадлежит к одной школе. Названия школ даны жемчужиной Faker, но их ограниченное количество, и учащиеся связаны с этими школами.
Могу ли я использовать FactoryGirl таким образом, чтобы можно было повторно использовать существующие школы? т.е. новый FactoryGirl.create(:student)
назначается либо
- новая школа еще не подделана => школа подделана с
FactoryGirl.create(:school)
- или в уже существующую фальшивую школу => Школа уже фальсифицирована и только что получена из БД
.
class Student
belongs_to :school, class_name: 'SchoolSociety'
end
class School
has_many :students
field :name
end
Я считаю, что здесь это не имеет значения, но я использую Mongoid. Мои фабрики будут выглядеть как
FactoryGirl.define do
factory :student, class: Student do
association(:school, factory: :school)
end
factory :school, class: School do
name { Faker::University.name }
end
end
Одним из решений было бы использовать School.where(name: Faker::University.name)
, но я бы потерял всю гибкость фабрик FactoryGirls ... Есть ли лучший способ обхода?
Контекст проводит тесты по огурцу со многими учениками.
Редактировать:
Мой реальный случай с огурцом - это тестирование джекпота, который увеличивается в соответствии с математической формулой, включающей текущее время и количество зарегистрированных пользователей (которые зарегистрировались в школе). Я делал что-то вроде
Scenario Outline: Jackpot increases with registrations and time
Given the current date is <date>
And <count> students have registered for the special event
When I am on the special event page
Then I should see "<jackpot> €"
Examples:
| date | count | jackpot |
| 2016/11/24 15:00:00 | 5 | 4 9 5 , 3 0 |
| 2016/11/30 15:00:00 | 10 | 4 9 7 , 6 0 |
| 2016/12/10 15:00:00 | 20 | 5 0 2 , 2 0 |
| 2016/12/10 15:00:00 | 150 | 6 5 2 , 2 0 |
Теперь эти <count> students have registered for the special event
должны быть учащимися, которые принадлежат к существующей школе (что означает, что во время процесса регистрации они должны зарегистрироваться, используя школьный адрес электронной почты, домен которого существует / сопоставим с School
в нашей БД)