Я пытаюсь использовать FactoryMuffin, библиотеку php factory, похожую на FactoryGirl, для генерации тестовых данных для моих интеграционных тестов.
В моем приложении Person
может иметь много Emails
и много Tokens
, Я хотел бы создать Person
с пятью Emails
и один Token
на моей фабрике, и напишите несколько тестов вокруг него.
В настоящее время я определяю свои заводы следующим образом:
FactoryMuffin::define('Person')->setDefinitions([
'id' => Faker::numberBetween(123456789, 987654321),
'name' => Faker::name()
]);
FactoryMuffin::define('Email')->setDefinitions([
'id' => Faker::numberBetween(123456789, 987654321),
'address' => Faker::email(),
'person_id' => 'factory|Person',
]);
FactoryMuffin::define('Token')->setDefinitions([
'token' => Faker::numberBetween(1234567891234, 9876543211234),
'person_id' => 'factory|Person',
]);
Моя проблема в том, когда я создаю Person
, он не создает никаких связанных Email
с или Token
s. Когда я создаю Token
, он автоматически создает Person
, но не связано Email
s.
Как я могу справиться с этим?
Основываясь на том, как работает Factory Muffin, вам не нужно создавать людей. Вы можете просто создать электронную почту и получить доступ к человеку, который создал электронную почту (наоборот). В приведенном ниже примере мы создаем сообщение, а затем получаем доступ к пользователю, который создал это сообщение для нас.
Рассмотрим этот пример из их документы.
$message = FactoryMuffin::create('Message');
$this->assertInstanceOf('Message', $message);
$this->assertInstanceOf('User', $message->user);
В вашем случае вы могли бы создать Email
и получить доступ к Person
как ниже
$email = FactoryMuffin::create('Email');
$emailPerson = $email->person;
Вы даже можете пойти дальше и создать 100 электронных писем и 50 токенов для одного и того же человека, вот так
$person = FactoryMuffin::create('Person');
$emails = FactoryMuffin::seed(100, 'Email', ['person_id' => $person->id]);
$tokens = FactoryMuffin::seed(50, 'Token', ['person_id' => $person->id]);
Других решений пока нет …