Laravel-Admin でユーザーidを取得・使用するメソッドの、ユニットテスト がうまく行きません。
StaffLog.phpというModelsファイルで、createStaffLogというメソッドを記述しました。
php
1 public static function createStaffLog(array $data) 2 { 3 $admin_id = Admin::user()->id; 4 5 $staff_log = new StaffLog(); 6 $staff_log->create([ 7 'staff_id'=> $data['staff_id'], 8 'admin_id'=> $admin_id, 9 ]); 10 }
以下のようなテストを作成したのですが、うまく行きません。
php
1 public function testCreateStaffLog() 2 { 3 $data = [ 4 'staff_id' => 1, 5 ]; 6 7 Staff::createStaffLog($data); 8 9 $admin_id = Admin::user()->id; 10 11 $arr = [ 12 'staff_id' => 1, 13 'admin_id' => $admin_id, 14 ]; 15 $this->assertDatabaseHas('staff_logs', $arr); 16 }
ユニットテストのエラーメッセージ は以下の通りです。
1) Tests\Unit\Models\StaffLogTest::testCreateStaffLog ErrorException: Trying to get property 'id' of non-object
Laravel-adminを操作してメソッドを実行する時は、はじめにLaravel-Adminにログインしているので、
$admin_id = Admin::user()->id;
でログインユーザーのidは取得できるのですが、ユニットテスト上では、Laravel-Adminにログインしている状態ではないので、 'id' of non-objectというエラーメッセージ が表示されるのだと思います。
ですが、 $admin_id = Admin::user()->id; を使用したメソッドを、ユニットテストするためにはどうしたら良いでしょうか?
おそらく以下のURLの actingas か
https://search.readouble.com/?query=5.8+actingas
↓このあたりの情報をつかって実装するのだとおもうのですが、いまのところ実装できていません。
https://medium.com/@yish/how-to-mock-authentication-user-on-unit-test-in-laravel-1441d491d82c
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。