Неожиданный формат DateTime в методе AssertDatabaseHas с датой при тестированииPhp

Кемеровские программисты 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 с.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»