Начиная с Laravel 5.6, Eloquent Date Casting доступен.
Итак, у меня есть модель MyModel с:
class MyModel extends Model {
protected $casts = ['from' => 'date:Y-m-d', 'to' => 'date:Y-m-d'];
protected $dates = ['from', 'to'];
}
И фабрикой:
$factory->define(MyModel::class, function(Faker $faker) {
return [
'from' => Carbon::instance($faker->dateTime),
'to' => Carbon::instance($faker->dateTime),
// some more attributes
];
}
В моем модульном тесте я ищу экземпляр MyModel :
/** @test */
public function example() {
$myModel = factory(MyModel::class)->create();
$this->assertDatabaseHas('my_models', $myModel->attributesToArray());
}
И вот что я получаю (отрывок):
Не удалось утверждать, что строка в таблице [my_models] соответствует атрибутам {
"from": "2019-01-12",
"to": "2019-02-13",
}.
Найдено: [{
" от ":" 2019-01-12 00:00:00 ",
" до ":" 2019-02-13 00:00: 00 ",
}].
Очевидно, что тест не пройден, потому что время добавляется в поля записи базы данных.Они имеют тип date
.
Я мог бы обновить утверждение до чего-то вроде этого ...
$this->assertDatabaseHas('my_models', [
'from' => $myModel->from->toDateTimeString(),
'to' => $myModel->to->toDateTimeString(),
] + $myModel->attributesToArray());
... но это далеко от элегантности.
Что мне сделать, чтобы сделать это утверждение успешным?