Неожиданный формат DateTime в методе AssertDatabaseHas с датой при тестировании ⇐ Php
Неожиданный формат DateTime в методе AssertDatabaseHas с датой при тестировании
При использовании метода assertDatabaseHas в тестах возникает несоответствие в обработке полей даты.
Несмотря на то, что поле преобразуется как date в модели Eloquent и хранится как date в базе данных MySQL, метод assertDatabaseHas возврат даты в виде строки даты и времени.
Это приводит к сбою утверждения при сравнении значения даты из тестовых данных со значением даты из базы данных.
Шаги по воспроизведению
Миграция: $table->date('due_date')->nullable();
Модель: protected $casts = ['due_date' => 'date:Y-m-d'];
Завод: 'due_date' => now()->addDays(fake()->numberBetween(1, 365))->format('Г-м-д'),
Тест:
it('должен тестироваться правильно', function () { $owner = User::factory()->create(); $this->actingAs($владелец); $this->assertDatabaseCount('доставки', 0); $delivery_data = Доставка::factory()->make()->toArray(); $response = $this->postJson(route('me.deliveries.store'), $delivery_data); $это ->assertDatabaseCount('доставки', 1) ->assertDatabaseHas('доставки', [ 'title' => $delivery_data['title'], 'description' => $delivery_data['description'], 'due_date' => $delivery_data['due_date'], 'visibility' => $delivery_data['visibility'], 'user_id' => $owner->id, ]); }); Результат:
Tests\Feature\API\Controllers\MeDeliveryStoreTest > он должен тестироваться правильно Не удалось подтвердить, что строка в таблице [доставки] соответствует атрибутам { "title": "Maiores tempore enim fuga qui.", "description": "Iure ipsum tempora est sequi et optio. Omnis rerum qui Architecto Officiis. Deleniti quos et harum et nobis. Nobis veniam кроме corrupti Placeat.", "due_date": "03.12.2024", "видимость": "публичный", «user_id»: 1, }. Нашел похожие результаты: [ { "title": "Maiores tempore enim fuga qui.", "description": "Iure ipsum tempora est sequi et optio. Omnis rerum qui Architecto Officiis. Deleniti quos et harum et nobis. Nobis veniam кроме corrupti Placeat.", "due_date": "2024-12-03 00:00:00", "видимость": "публичный", «user_id»: 1, } ]. в тестах/Функция/API/Контроллеры/MeDeliveryStoreTest.php:21 17▕ $response = $this->postJson(route('me.deliveries.store'), $delivery_data); 18▕ 19▕ $это 20▕ ->assertDatabaseCount('доставки', 1) ➜ 21▕ ->assertDatabaseHas('доставки', [ 22▕ 'title' => $delivery_data['title'], 23▕ 'description' => $delivery_data['description'], 24▕ 'due_date' => $delivery_data['due_date'], 25▕ 'видимость' => $delivery_data['видимость'], Тесты: 1 провален (3 утверждения) Продолжительность: 0,63 с.
При использовании метода assertDatabaseHas в тестах возникает несоответствие в обработке полей даты.
Несмотря на то, что поле преобразуется как date в модели Eloquent и хранится как date в базе данных MySQL, метод assertDatabaseHas возврат даты в виде строки даты и времени.
Это приводит к сбою утверждения при сравнении значения даты из тестовых данных со значением даты из базы данных.
Шаги по воспроизведению
Миграция: $table->date('due_date')->nullable();
Модель: protected $casts = ['due_date' => 'date:Y-m-d'];
Завод: 'due_date' => now()->addDays(fake()->numberBetween(1, 365))->format('Г-м-д'),
Тест:
it('должен тестироваться правильно', function () { $owner = User::factory()->create(); $this->actingAs($владелец); $this->assertDatabaseCount('доставки', 0); $delivery_data = Доставка::factory()->make()->toArray(); $response = $this->postJson(route('me.deliveries.store'), $delivery_data); $это ->assertDatabaseCount('доставки', 1) ->assertDatabaseHas('доставки', [ 'title' => $delivery_data['title'], 'description' => $delivery_data['description'], 'due_date' => $delivery_data['due_date'], 'visibility' => $delivery_data['visibility'], 'user_id' => $owner->id, ]); }); Результат:
Tests\Feature\API\Controllers\MeDeliveryStoreTest > он должен тестироваться правильно Не удалось подтвердить, что строка в таблице [доставки] соответствует атрибутам { "title": "Maiores tempore enim fuga qui.", "description": "Iure ipsum tempora est sequi et optio. Omnis rerum qui Architecto Officiis. Deleniti quos et harum et nobis. Nobis veniam кроме corrupti Placeat.", "due_date": "03.12.2024", "видимость": "публичный", «user_id»: 1, }. Нашел похожие результаты: [ { "title": "Maiores tempore enim fuga qui.", "description": "Iure ipsum tempora est sequi et optio. Omnis rerum qui Architecto Officiis. Deleniti quos et harum et nobis. Nobis veniam кроме corrupti Placeat.", "due_date": "2024-12-03 00:00:00", "видимость": "публичный", «user_id»: 1, } ]. в тестах/Функция/API/Контроллеры/MeDeliveryStoreTest.php:21 17▕ $response = $this->postJson(route('me.deliveries.store'), $delivery_data); 18▕ 19▕ $это 20▕ ->assertDatabaseCount('доставки', 1) ➜ 21▕ ->assertDatabaseHas('доставки', [ 22▕ 'title' => $delivery_data['title'], 23▕ 'description' => $delivery_data['description'], 24▕ 'due_date' => $delivery_data['due_date'], 25▕ 'видимость' => $delivery_data['видимость'], Тесты: 1 провален (3 утверждения) Продолжительность: 0,63 с.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
AssertDatabaseHas завершается с ошибкой при использовании с десятичным столбцом базы данных.
Anonymous » » в форуме Php - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-