我有一个具有以下定义的工厂
public function definition()
{
$startDate = Carbon::createFromFormat('Y', $this->faker->year);
$endDate = $startDate->addYear();
return [
'name' => $startDate->year,
'start_date' => $startDate->format('Y-m-d'),
'end_date' => $endDate->format('Y-m-d'),
];
}
所以这会生成一个如下所示的数组
[
'name' => 2020,
'start_date' => '2020-01-30',
'end_date' => '2021-01-30'
]
上述工作按预期工作,直到要求返回该start_date
字段并且该end_date
字段出现。所以在我的模型中我添加了:
protected $dates = ['created_at', 'updated_at', 'start_date', 'end_date'];
在我的验证器中,我验证格式是Y-m-d
.
public function rules()
{
return [
'name' => 'required|unique:academic_years',
'start_date' => 'required|date_format:Y-m-d|before_or_equal:end_date',
'end_date' => 'required|date_format:Y-m-d',
];
}
我也有以下测试:
public function should_throw_error_if_date_format_is_invalid()
{
Permission::factory()->state(['name' => 'create academic year'])->create();
$user = User::factory()->create();
$user->givePermissionTo('create academic year');
$this->actingAs($user, 'api')->postJson('/api/academic-years', [
'name' => $this->faker->year,
'start_date' => '01-01-2019',
'end_date' => '2019-01-01'
])->assertStatus(422);
$this->actingAs($user, 'api')->postJson('/api/academic-years', [
'name' => $this->faker->year,
'end_date' => '01-01-2019',
'start_date' => '2019-01-01'
])->assertStatus(422);
}
测试失败,但如果我删除$dates
数组,测试通过。在检查传递给请求的对象时,我看到的日期格式{"name":1995,"start_date":"1995-04-04T00:00:00.000000Z","end_date":"1995-04-04T00:00:00.000000Z"}
与Factory
.
我该如何解决这个问题?