공식 문서에 없는 Laavel 5.5의 Dusk는 GiitHubAction으로 CI를 진행하려고 합니다.

배경.


Laravel5.5Dusk 공식 문서에는 GiitHubActions에서 CI의 행동이 기재되어 있지 않고 고전 끝에 비망록으로 삼았다.

전제 조건

  • Laravel5.5Dusk
  • 설치

    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(GiitHubAction 설정)


    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 부팅 시 Laavel Dusk 테스트 코드 고려 사항


    php artisan serve의 라인에서migration과seeder 등을 실행하면 DB와 연결할 수 없기 때문에Dusk가 떨어집니다.Seeder 등은 Duck이 시작되기 전에 실행하십시오. (이것을 눈치채지 못했습니다. 팩토리의 실행이 떨어져 매우 반했습니다.)

    참고 자료


    GiitHub Project의 어딘가(Bookmark를 잊으면 안 돼!)

    좋은 웹페이지 즐겨찾기