LoginControllerでオーバーライドしたauthenticated()
のテストをしていました。
Controllers/Auth/LoginController.php
/**
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return \Illuminate\Http\Response
*/
protected function authenticated(Request $request, $user)
{
return redirect('users/' . $user->id)->with('my_status', __('You logged in.'));
}
ログインに成功するとユーザーページにリダイレクトして
You logged in.というフラッシュメッセージを表示します。
テストのコード
/tests/Unit/LoginControllerTest.php
/**
* A basic unit test example.
*
* @return void
*/
public function testAuthenticated()
{
$user = factory(User::class)->create([
'password' => '1234'
]);
$response = $this->post('login', [
'_token' => csrf_token(),
'email' => $user->email,
'password' => '1234',
'remember' => 'on'
]);
$response->assertRedirect('users/' . $user->id);
$this->assertAuthenticatedAs($user);
}
テストを実行
$ vendor/bin/phpunit --filter='LoginControllerTest'
PHPUnit 7.5.13 by Sebastian Bergmann and contributors.
F. 2 / 2 (100%)
Time: 2.85 seconds, Memory: 26.00 MB
There was 1 failure:
1) Tests\Unit\LoginControllerTest::testAuthenticated
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'http://localhost/users/1'
+'http://localhost'
/home/user/php/app/lara58/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:224
/home/user/php/app/lara58/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:169
/home/user/php/app/lara58/tests/Unit/LoginControllerTest.php:32
FAILURES!
Tests: 2, Assertions: 4, Failures: 1.
http://localhost/users/1
にリダイレクトしていないのでログイン失敗です。
解決方法
/tests/Unit/LoginControllerTest.php
$user = factory(User::class)->create([
'password' => bcrypt('1234')
]);
$ vendor/bin/phpunit --filter='LoginControllerTest'
PHPUnit 7.5.13 by Sebastian Bergmann and contributors.
.. 2 / 2 (100%)
Time: 2.68 seconds, Memory: 26.00 MB
OK (2 tests, 7 assertions)
成功しました。
他のテストでactingAs()
メソッドを使った時はbcrypt()
を使わなくてもできたのですが、ログインする時はbcrypt()
が必要なようです。