メモ > 技術 > フレームワーク: Laravel > テスト・デバッグ
テスト・デバッグ
■デバッグ
デバッグモード
.env
APP_DEBUG=true
デバッグバー
composer require barryvdh/laravel-debugbar
config/app.php
'providers' => [
Barryvdh\Debugbar\ServiceProvider::class,
'aliases' => [
'Debugbar' => Barryvdh\Debugbar\Facade::class,
アプリケーションログ
/storage/logs
Laravel5.5: Laravel Debugbarを使う - Qiita
https://qiita.com/sutara79/items/9fd442a81001842aeba1
config/app.php で設定しているドメインと異なるドメインでアクセスすると、デバッグバーは表示されないようなので注意
(正しいドメイン、もしくはIPアドレスでのアクセスなら表示されるみたい)
Laravel5.0でlaravel-debugbarを使う - Qiita
https://qiita.com/naga1460/items/4a5a5ede493ef008fe90
■単体テスト
テスト: テストの準備 5.4 Laravel
https://readouble.com/laravel/5.4/ja/testing.html
Laravel5でテスト(PHPUnit) - Qiita
https://qiita.com/zaburo/items/839c81a1e166a48fe3fa
テストを実行
cd C:\localhost\home\test\public_html\laravel\blog
phpunit
実行すると以下のエラーになる
PHP Fatal error: Call to undefined method PHPUnit_Util_Configuration::getTestdoxGroupConfiguration() in C:\localhost\home\test\public_html\laravel\test\vendor\phpunit\phpunit\src\TextUI\TestRunner.php on line 1066
LaravelプロジェクトとJenkinsの連携 - ハマログ
https://blog.e2info.co.jp/2017/05/10/laravel_and_jenkins/
PHPUnitのバージョンが問題みたいだが、解説のようにcomposerを実行しても解決せず
C:\localhost\home\test\public_html\laravel\test\vendor\phpunit\phpunit\src\TextUI\TestRunner.php
//$testdoxGroupConfiguration = $arguments['configuration']->getTestdoxGroupConfiguration();
1066行目をコメントアウトしたら一応動く。ただし何らかの機能が削られていると思われる
テストを実行
phpunit
以下のテストがはじめから作成されているので、これが実行される
HTTPテストやChromeドライバーによるテストもできるみたい
\tests\Feature\ExampleTest.php
\tests\Unit\ExampleTest.php
設定ファイルを指定してテストを実行
phpunit --configuration phpunit.xml
特定のテストのみ実行
phpunit tests/Feature/RootTest.php --configuration phpunit.xml
テストを作成
php artisan make:test ArticleTest --unit
\test\tests\Unit\ArticleTest.php にテストが作成される
具体的なテストの作成については、以下が参考になる
chapter8/app at master - laravel-jp-reference/chapter8
https://github.com/laravel-jp-reference/chapter8/tree/master/app
LaravelでHTTPテスト - Qiita
https://qiita.com/Frog_woman/items/6a143af0a042dc853e88
■データベースを利用する単体テスト
\config\database.php
の「connections」に以下の設定を追加(データベースにテスト時の値が登録されないように、SQLiteのインメモリ機能を利用する)
'testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
'option' => [
PDO::ATTR_PERSISTENT => true,
],
],
\phpunit.xml
テストの際に上記設定を使用する
<env name="DB_CONNECTION" value="testing"/>
テスト実行時
「PHP Fatal error: Class 'Doctrine\DBAL\Driver\PDOSqlite\Driver' not found」
と表示されるようなら、doctrine/dbal をインストールする
composer require doctrine/dbal
以下も参考にする
データベースのテスト 5.5 Laravel
https://readouble.com/laravel/5.5/ja/database-testing.html
laravelでDBテストコードを書く前の設定すべきこと - Qiita
https://qiita.com/kuriya/items/4c9dbefc19514f415374
■ブラウザテスト(Selenium)
$ composer require --dev laravel/dusk … とても時間がかかった。PHP5環境ではインストールできない?
Using version ^2.0 for laravel/dusk
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
- Installing facebook/webdriver (1.4.1): Downloading (100%)
- Installing laravel/dusk (v2.0.7): Downloading (100%)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: laravel/dusk
Package manifest generated successfully.
app\Providers\AppServiceProvider.php
に登録
php artisan dusk:install
を実行すると、テストの雛形が作成される
php artisan dusk
でテストを実行できる。「--configuration phpunit.xml」のオプションは使えないみたい?
php artisan dusk tests/Browser/AdminLoginTest.php
で特定のテストのみを実行できる
php artisan dusk tests/Browser/AdminLoginTest.php --filter=testStaffLoginSuccess
で特定のテスト内のメソッドのみを実行できる
通常アクセスかテストかを判定するなら、
$_SERVER['HTTP_USER_AGENT']
の値を調べるか
ブラウザテスト(Laravel Dusk) 5.4 Laravel
https://readouble.com/laravel/5.4/ja/dusk.html
Laravel 5.4 で手軽にテストを書こう! | 株式会社インフィニットループ技術ブログ
https://www.infiniteloop.co.jp/blog/2017/05/laravel-5-testing/
Laravel 5.4で導入されたLaravel Duskをテスト後にDBリセットさせるようにして試してみた - Qiita
https://qiita.com/n_mogi/items/b96ccc1df31aa5fb859a
Laravel5でPC/SPを振り分ける方法 - Qiita
https://qiita.com/qwe001/items/0064adc3c893f603fe21
【Laravel 5.4】Laravel Duskによるブラウザテストの作成方法 - Qiita
https://qiita.com/amymd/items/0a5f2705e29972d0d22e
ブラウザテスト(Laravel Dusk) 5.4 Laravel
https://readouble.com/laravel/5.4/ja/dusk.html
なお
「Your requirements could not be resolved to an installable set of packages.」
のエラーになってインストールできない場合、
以下でインストールできることがある
$ composer require --dev laravel/dusk:"^2.0"
ブラウザテスト(Laravel Dusk) 5.5 Laravel
https://readouble.com/laravel/5.5/ja/dusk.html
また
「Laravel Facebook\WebDriver\Exception\SessionNotCreatedException: session not created exception: Chrome version must be >= 62.0.3202.0」
のようなエラーが表示される場合、Chromeのバージョンが低い可能性がある
Homestead内でupdateを実行する
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
Laravel-dusk does not work - Stack Overflow
https://stackoverflow.com/questions/48471515/laravel-dusk-does-not-work
コードによってはテスト時にデータが消去されるので注意
避けたいなら、テスト用にデータベースを作っておく必要があるみたい
Laravel DuskでDBデータが飛んだって話(メモ) - Qiita
https://qiita.com/Frog_woman/items/6f3581809a38dfe655e4
Laravel5.7: ブラウザテストを記述する - Qiita
https://qiita.com/sutara79/items/9190c8444a49842ca25a
■アプリケーションログ
アプリケーションにログを記録する際、ログレベルを意識しておくと対応の切り分けなどに役立つ
ログレベルは PSR-3 で定義されている
【PHP】PSR-3 Logger Interface(ロガーインタフェース)
https://www.ritolab.com/entry/95
どのログレベルを使用するかなど、以下が参考になる
ログレベルちゃんと使い分けてますか? - OTOBANK Engineering Blog
https://engineering.otobank.co.jp/entry/2016/09/20/181756
Laravelでログを使う場合、以下などを参考にする
エラーとログ 5.5 Laravel
https://readouble.com/laravel/5.5/ja/errors.html
Laravel5.6 での ログ設定について - Qiita
https://qiita.com/hrdaya/items/b01d5621937a0710ca64
ログを日付ごとのファイルにする場合、config/app.php もしくは APP_LOG の項目で設定できる
日付ごとにした場合、デフォルトではログは5日間保持される
例えば14日間保持したい場合、config/app.php の
'log' => env('APP_LOG', 'daily'),
'log_level' => env('APP_LOG_LEVEL', 'debug'),
この部分に以下を追加する(Laravel5.5ではデフォルトでは項目自体が存在しないので、項目を追加する)
'log_max_files' => '14',
Laravelのlogファイルを日付ごとに分ける - Qiita
https://qiita.com/isao_e/items/304c66f7807f141b6f43