Я создаю функциональный тест для отношений один ко многим. Я просто имею отношение один ко многим с правильной базой настройки в документации Laravel. Мой тест проходит следующим образом.
/** @test */
public function it_attach_containers()
{
$this->withoutExceptionHandling();
$vendor = factory(Vendor::class)->create();
$containersCount = 30;
$containers = factory(Container::class, $containersCount)->create();
$user = factory(User::class)->create();
$attributes = [
'vendor' => $vendor->id,
'ordered' => null,
'deployed' => null,
'last_contact' => null,
'containers' => $containers->pluck('name')
];
$response = $this->actingAs($user, 'api')
->withHeaders([
'X-Requested-With' => 'XMLHttpRequest'
])
->json('POST', '/api/deployments', $attributes);
$deployment = Deployment::find($containers[0]->id);
$this->assertInstanceOf(Deployment::class, $deployment);
$this->assertCount($containersCount, $deployment->containers()->get());
$this->assertDatabaseHas('deployments', [
'vendor' => $vendor->id,
'ordered' => null,
'deployed' => null,
'last_contact' => null
]);
}
Отношение, которое я имею, является отношением один ко многим. Одно развертывание имеет много контейнеров. Приведенный ниже код показывает, как я связываю отношения.
public function associateDeployment(Deployment $deployment, $data)
{
foreach ($data['containers'] as $containerName) {
$container = Container::where('name', $containerName)->first();
if (!$container) {
$container = Container::create([
'name' => $containerName,
'status' => true
]);
}
if (is_null($container->deployment_id)) {
$container->deployment()->associate($deployment);
$container->save();
}
}
}
Результат моего теста действительно странный. иногда это проходит, но иногда нет. Я заметил, что проблема возникает на assertCount
. как вы можете видеть на моем тесте. он утверждает, что контейнеров 30, но в основном он не go до 30. его около 25-29 .. тогда иногда он проходит. в чем проблема?