主な記載内容
Laravel10でlaravel breezeのログインの機能のテストをLaravel duskを使って行ってみる。
準備
composer create-project --prefer-dist laravel/laravel プロジェクト名
(breeze)
php artisan breeze:install
php artisan migrate
npm install
npm run dev
(dusk)
composer require --dev laravel/dusk
php artisan dusk:install
php artisan dusk:make LoginTest
データベースの設定
.envファイル
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889 // MySQLポート
DB_DATABASE=your-database-name
DB_USERNAME=root
DB_PASSWORD=root
テスト実施
以下の画面をテスト
php artisan serve
http://127.0.0.1:8000/login
※php artisan serveでテストするとき、.envを以下のように修正
APP_URL=http://127.0.0.1:8000
テスト作成
php artisan dusk:make LoginTest
このコマンドを実行すると、tests/Browser ディレクトリ内に LoginTest.php ファイルが作成される。
このファイル内に具体的なテストケースを記述していくことで、Webアプリケーションのブラウザベースのテストを行うことができる。
以下、ログインで、ユーザ名、パスワードを入力し、ページ遷移するかどうかのテスト
<?php
namespace Tests\Browser;
use App\Models\User;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
class LoginTest extends DuskTestCase
{
use DatabaseMigrations;
/**
* ユーザーがログインページにアクセスしてログインするテスト
*
* @return void
*/
public function testUserCanLoginWithCorrectCredentials()
{
$user = User::factory()->create([
'email' => 'testuser@example.com',
'password' => bcrypt('password'),
]);
$this->browse(function (Browser $browser) use ($user) {
$browser->visit('/login')
->waitFor('button[type="submit"]', 5)
->type('email', $user->email)
->type('password', 'password')
->click('button[type="submit"]')
->assertPathIs('/dashboard');
});
}
}
テスト実行
php artisan dusk
以下のように結果が出る。
(下記は、MAMPを使用し、tests/Browserの直下に2つファイルがある例、上記以外にもう一つある)
apple@appurunoMacBook-Pro testRusk % php artisan dusk
PHPUnit 10.1.3 by Sebastian Bergmann and contributors.
Runtime: PHP 8.2.0
Configuration: /Applications/MAMP/htdocs/testRusk/phpunit.dusk.xml
.. 2 / 2 (100%)
Time: 00:05.270, Memory: 34.50 MB
OK (2 tests, 2 assertions)
Laravelでのテスト
Laravelでのテストは通常、testsディレクトリに格納され、その中にはFeature、Unit、そしてBrowserという3つのサブディレクトリが存在する。
今回行ったのは、Browserで対応したもの。
まとめ
Laravelでのテストは簡易にできるということがわかったので、念の為記載した。