Запись еще не создана, поэтому не рекомендуется назначать отношения stati c таким образом на фабриках.
Вместо этого можно использовать фабрику create
, а затем назначить отношения внутри тестового примера. .
Например:
Entry
фабрика
$factory->define(Entry::class, function (Faker $faker) {
return [
'user_id' => factory(User)->create()->id,
'caption' => $faker->sentence(10),
'entry_status_id' => factory(EntryStatus)->create()->id,
];
});
EntryStatus
фабрика
$factory->define(EntryStatus::class, function (Faker $faker) {
return [
'name' => $faker->word,
'entry_status' => $faker->numberBetween(0, 2) //Its better start from 1 though
];
});
User
фабрика
$factory->define(User::class, function (Faker $faker) {
return [
'name' => $faker->word
];
});
В вашем тестовом примере начните связывать вещи вместе (если вам нужно).
/**
* @test
*/
public function exampleTestCase()
{
$enteryStatus = factory(EntryStatus::class)->create(['entry_status' => 1]);
//create 6 entries
$entry = factory(Entry::class, 6)->create(['entry_status_id' => $enteryStatus->id]);
//TODO: assert something
}
Вы можете проверить afterCreatingState
$factory
->state(EntryStatus::class, 'awaiting_payment', ['name' => 'awaiting_payment'])
->afterCreatingState(EntryStatus::class, 'awaiting_payment', function ($entryStatus, $faker) {
factory(Entry::class)->create([
'entry_status_id' => $entryStatus->id,
]);
});