🦔
公式ドキュメントに載ってないLaravel5.5のDuskをGitHubActionsでCIしたい
背景
Laravel5.5 Dusk公式ドキュメントにGitHubActionsでのCIのやり方が載ってなくて、苦戦したので備忘録として。
前提条件
- Laravel5.5 Duskをインストール済み
DuskTestCase.phpの設定
ここの設定は特に意識する必要なくだいたいデフォルトのままで良い
<?php
namespace Tests;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Laravel\Dusk\TestCase as BaseTestCase;
abstract class DuskTestCase extends BaseTestCase
{
use CreatesApplication;
/**
* Prepare for Dusk test execution.
*
* @beforeClass
* @return void
*/
public static function prepare()
{
static::startChromeDriver();
}
/**
* Create the RemoteWebDriver instance.
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function driver()
{
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
'--headless',
'--window-size=1920,1080',
'--no-sandbox',
]);
return RemoteWebDriver::create(
'http://127.0.0.1:9515', DesiredCapabilities::chrome()->setCapability(
ChromeOptions::CAPABILITY, $options
), 100000, 100000 // 最後の引数はタイムアウト用の設定
);
}
}
.github/workflows/dusk.yml(GitHubActionsの設定)
name: Testing Laravel Dusk with MySQL
on: [push, pull_request]
jobs:
laravel:
name: Laravel (PHP ${{ matrix.php-versions }})
runs-on: ubuntu-latest
### 省略
strategy:
fail-fast: false
max-parallel: 3
matrix:
php-versions: ['7.2'] # Laravel5.5なのでPHP7.2を指定
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@master
with:
php-version: ${{ matrix.php-versions }}
extension-csv: mbstring, dom, fileinfo, mysql
coverage: none
- name: composer downgrade
run: composer self-update --1
- name: Copy .env
run: cp .env.ci .env
- name: install libsqlite3
run: sudo apt-get install -y libsqlite3-dev
- name: Install Composer dependencies
run: composer install --no-scripts
- name: Generate key
run: php artisan key:generate
- name: Clear Config
run: |
php artisan config:clear
php artisan cache:clear
- name: Run dusk tests
run: |
./vendor/laravel/dusk/bin/chromedriver-linux &
chmod -R 0755 vendor/laravel/dusk/bin/ &
php artisan serve & # php artisan serveを起動し、&でマイグレーションとseederを起動する
php artisan migrate
php artisan db:seed
php artisan dusk
env: # php artisan serveだと.envが正常に読まれないのでここで指定する
APP_ENV: ci
APP_URL: http://127.0.0.1:8000
DB_CONNECTION: mysql
DB_HOST: 127.0.0.1
DB_PORT: 33306
DB_DATABASE: test_db
DB_USERNAME: root
DB_PASSWORD: root
CI起動中のLaravel Duskのテストコードの注意点
php artisan serveのスレッド上でmigrationやseederなど実行するとDBとの接続ができないため、確定でDuskが落ちます。Seederなどはdusk起動前に実行しましょう(これに気づかず、Factoryの実行で落ちてめちゃめちゃハマりました)。
参考
GitHub Projectのどこか(Bookmark忘れてごめんなさい!!)
Discussion