-
Notifications
You must be signed in to change notification settings - Fork 6
Dusk
composer install
php artisan dusk:chrome-driver
テストDB test
を作成します。
既にConnect-CMSがインストール済みで、.env
がある事を前提に説明します。
.env
をコピーして .env.dusk.local
作成します。
これがないと、本番DBがクリアされるので、要注意!
cd /var/www/html/connect-cms/
cp .env .env.dusk.local
vi .env.dusk.local
APP_DEBUG=false ← falseに変更します。(押そうとしてるボタンが `phpdebugbar-header` と被って押せないエラーの回避と、trueよりもHTMLの量が減りテストが若干早くなります。)
APP_URL=http://localhost ← この値は、ブラウザからアクセスするアプリケーションで使用するURLと一致させます。
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=test ← 作成したテストDB(test)、ユーザ、パスワードに変更
DB_USERNAME=homestead ← 同上
DB_PASSWORD=secret ← 同上
php artisan dusk tests\Browser\User\HeaderArea.php
※ スクリーンショットの保存先
tests\Browser\screenshots
※ duskの場合、--env=dusk.local
を指定しなくても、.env.dusk.local
があれば自動的に .env
にその設定が反映されます。
php artisan dusk tests\Browser\User\HeaderAreaTest.php --filter testInvoke
### 一般プラグインのテスト
php artisan dusk --group=user
### 管理プラグインのテスト
php artisan dusk --group=manage
### コアのテスト
php artisan dusk --group=core
php artisan dusk
php artisan dusk:fails
> tests\bin\connect-cms-test.bat
// ※ 初回はこっち
> tests\bin\connect-cms-test.bat db_clear
Laravel5.7: ブラウザテストを記述する#重要-envのコピー
ブラウザテストを実行すると
.env
ファイルの内容が一時的に書き換わります。 具体的には下記の流れをたどるようです。
.env
のコピーが作られ、.env.backup
と命名される。.env
の内容が.env.duck.local
の内容に置き換わる。- ブラウザテスト終了。
.env
の内容が.env.backup
に置き換わり、元に戻る。.env.backup
が削除される。
Note: 本番環境にDuskをインストールしてはいけません。インストールすると、アプリケーションに対する未認証でのアクセスを許すようになります。
テスト実行時に1度だけ、自動で下記を実行するため、テストDB初期化不要です。
php artisan config:clear
php artisan migrate --env=dusk.local
### 全テーブルを空にする
php artisan db:seed --class=TruncateAllTables --env=dusk.local
php artisan db:seed --env=dusk.local
手動でテストDB初期化等を行うなら、下記コマンドです。
### キャッシュクリア
php artisan cache:clear
php artisan config:clear
### データベース作り直し
php artisan migrate:fresh --env=dusk.local
### データ・初期追加
php artisan db:seed --env=dusk.local
.env
の DB_DATABASE
を test
に切り替える事で、テスト後のデータを画面から確認できます。
DB_DATABASE=test
// [debug コンソール]
fwrite(STDOUT, __METHOD__ . PHP_EOL);
Bootstrapカスタムラジオボタンの選択は、LabelをClickすることで可能(Input radio のClick はエラーになる)
.env.dusk.local
で APP_DEBUG=true
時に下記エラーが出る。
原因は、押そうとしてるボタンが phpdebugbar-header
と被って押せないため、テストエラーに。
1) Tests\Browser\Manage\PluginManageTest::testInvoke
Facebook\WebDriver\Exception\ElementClickInterceptedException: element click intercepted: Element <button type="submit" class="btn btn-primary form-horizontal">...</button> is not clickable at point (1109, 1060). Other element would receive the click: <div class="phpdebugbar-header">...</div>
.env.dusk.local
を APP_DEBUG=false
に修正する
vi .env.dusk.local
###APP_DEBUG=true
APP_DEBUG=false
APP_DEBUG=true でもテストが通るように、ウィンドウサイズを一時的に広げる
修正例)
private function update()
{
$this->browse(function (Browser $browser) {
// bugfix: APP_DEBUG=trueだと,phpdebugbar-header とボタンが被って、ボタンが押せずにテストエラーになるため、ウィンドウサイズを一時的に広げる
$browser->resize(1920, 1880);
$browser->press('更新')
->assertTitleContains('Connect-CMS');
$this->screenshot($browser);
$browser->resize(1920, 1080);
});
}
テストのsetUp()時に $this->closePhpdebugar() を呼ぶ
修正例)
/**
* テスト前共通処理
*
* @return void
*/
protected function setUp(): void
{
parent::setUp();
// APP_DEBUG=trueだと,phpdebugbar-header とボタンが被って、ボタンが押せずにテストエラーになるため、phpdebugbarを閉じる
$this->closePhpdebugar();
}
テスト実行時にConnection refused
エラーが発生
全テスト実行時にまれに発生しました。
1) Tests\Browser\Core\MessageFirstShowTest::testMessageFirstShow
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"capabilities":{"firstMatch":[{"browserName":"chrome","goog:chromeOptions":{"args":["--disable-gpu","--headless","--window-size=1920,1080"]}}]},"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"args":["--disable-gpu","--headless","--window-size=1920,1080"]}}}
Failed to connect to localhost port 9515: Connection refused
再度テスト実施で解消します。 (テストはPCに負荷がかかるため、通信が不安定になったのかもです。)
テスト実行すると下記エラーが出る。
ReflectionException: Class TruncateAllTables does not exist
下記を実行してからもう1回やると、正常に実行されます。
composer dump-autoload
- home
- Overview
- Install
- Install (インストール)(Linux等へのインストール:root権限ある場合)
-
Install-sakura(さくらのレンタルサーバ)
- Install-sakura-root(ドキュメントルート版)
- Install-Xserver(XServer)
- Install-lolipop(ロリポップ-ハイスピードプラン)
- Install-ColorfulBox(カラフルボックス)
- install-CentOS7+PHP7
- Install-XAMPP(Windows+XAMPP)
- install-Docker
- Update
- Plans
- Data
- File Upload
- Design
- Theme(テーマ)
- Font-Icon(アイコン)
- Button(ボタン)
- Display of input error(入力エラーの表示)
- Multi Language
- Policies
- Plugin
- Basic function(基本の関数)
- Opac(蔵書管理)
- OpeningCalendar(開館カレンダー)
- Template(テンプレート)
- Cabinet(キャビネット)
- Whatsnew(新着)
- Search(サイト内検索)
- Approval(承認機能)
- Holidays(祝日管理)
- Menu(メニュー)
-
OriginalPlugin(オリジナル・プラグイン開発)
- OriginalPluginFiles(ファイル一覧)
- Sample.php
- SamplePost.php
- plugin.ini
- SamplesPlugin.php
- create_samples_table.php
- create_sample_posts_table.php
- samples_frame_edit_tab.blade.php
- card/index.blade.php
- card/template.ini
- default/bucket.blade.php
- default/edit.blade.php
- default/index.blade.php
- default/list_buckets.blade.php
- default/show.blade.php
- default/template.ini
- WYSIWYG
- Session
- Programing tips
- Rule(ルール)
- Laravel method tips
- Laravel reference pages
- PHP
- phpcs
- Datetimepicker(日付入力)
- Hook(処理のフック)
- SQL
- Pull-Request(Web画面上)
- Post
- Optimize
- Composer
- npm
- コントローラー側の$this--can()-の調査
- API (外部サービスAPI)
- Test Case(テストケース)
- memo(永原のメモ)
- TCPDF(実装サンプル)
- Phpunit(ユニットテスト)
-
Dusk(ブラウザテスト)
- Github-Actions-Dusk(Github Actionsでブラウザテスト)
- Dusk-Manual(マニュアル自動生成)
- Develop-Windows(Windows開発環境)
- users_columns(ユーザ任意項目)
- container-page-beta(コンテナ方式(ページ)対応(ベータ版))
- Migration
- Other
- Link
- MultiLanguage(多言語化の際の注意点)