Laravelでコントラーラーに記述した。addStaffDateというメソッドのユニットテストを書いています。
以下のようなプログラムです。
StaffDate.php
php
1 public static function addStaffDate(array $arr) 2 { 3 $time = Carbon::now(); 4 5 $staff_date = new StaffDate(); 6 7 foreach ($arr['id'] as $id) { 8 $staff_date->create([ 9 'Staff_id'=> $id, 10 'time' => $time, 11 ]); 12 }; 13 }
StaffDateTest.php
PHP
1 public function testStaffDate() 2 { 3 $data = [ 4 'id'=> [1], 5 ]; 6 7 StaffDate::addStaffDate($data); 8 9 $time = Carbon::now(); 10 $this->assertDatabaseHas('staff_date', [ 11 'Staff_id'=> 1, 12 'time' => $time, 13 ]); 14 }
ユニットテストは失敗したのですが、エラーの原因はCarbon::now()の表示の違いだったようです。
エラーメッセージ をみてみると、
php
1"Staff_id": 1 2"time": "2020-09-04T11:08:10.842939Z",
の値が出力されており、DB上で見つかった値は、
php
1"Staff_id": 1 2"time": "2020-09-04 20:08:10",
でした。おそらくデータベースに値が保存される前は、UTCの表示時刻表示かつ、細かい秒単位まで表示され、TやZなどのタイムゾーン?の文字も出力されてしまうことが原因だと思います。
ユニットテストの記述で日付をフォーマットすれば良いと思うのですが、そのやり方がわかりません。
StaffDateTest.php
PHP
1 public function testStaffDate() 2 { 3 $data = [ 4 'id'=> [1], 5 ]; 6 7 StaffDate::addStaffDate($data); 8 $time->format("2020-09-04T11:08:10.842939Z"); 9 10 $this->assertDatabaseHas('staff_date', [ 11 'Staff_id'=> 1, 12 'time' => $time, 13 ]); 14 }
以下の部分をどのように記述すればうまくいきますでしょうか?
php
1$time->format("2020-09-04T11:08:10.842939Z);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/04 14:05
2020/09/04 20:09
退会済みユーザー
2020/09/06 05:20 編集
2020/09/06 06:39
退会済みユーザー
2020/09/06 06:49