тестирование — отношения один-ко-многим с FactoryMuffin в php?

Я пытаюсь использовать 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с или Tokens. Когда я создаю Token, он автоматически создает Person, но не связано Emails.

Как я могу справиться с этим?

1

Решение

Основываясь на том, как работает 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]);
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector