Githubアクションによるラーラヴィル夕暮れ


こんにちは
私は私のプロジェクトのうちの1つのユニットテストをするように頼まれました.
  • ユーザーがログインしてダッシュボードを見ることができます
  • ユーザーがログインし、開発者ポータルを参照してください
  • ユーザーがログインして管理パネルを見ることができます
  • 基本的にテストは非常に簡単でまっすぐ進む右?
    だからインストールをオフにIMLaravel Dusk この種のテストはUI自体を見る動作を含んでいます.
    あなたはララベルの夕暮れに精通していない場合は、ラーラヴィルダスクはララヴァ自体によってサポートされている公式のライブラリです.

    Laravel Dusk provides an expressive, easy-to-use browser automation and testing API. By default, Dusk does not require you to install JDK or Selenium on your machine. Instead, Dusk uses a standalone ChromeDriver installation. However, you are free to utilize any other Selenium compatible driver you wish. - Laravel Dusk


    それで、更なるADOなしで.

    準備
    ユーザーファクトリを作成していることを確認してくださいDatabaseSeeder.php この単体テストを始める前のファイル.ダミーのユーザーがテストケースをテストする必要があるので.

    ララベルの日暮れインストール
    LALAVEL DUSKをインストールするのはとても簡単ですcomposer require --dev laravel/dusk パッケージをインストールしたらphp artisan dusk:install あなたのlaravel夕暮れをインストールするには.

    Laravelの夕暮れ環境設定
    デフォルトでは、Laravel Dusk環境設定ファイル.env.dusk が存在しない場合、自動的に使用されます.環境設定としてenvを一時的に設定します.私たちのケースでは、我々は呼ばれる別々のデータベースを使用する必要がありますdusktest データベースと作成.env.dusk ルートプロジェクトフォルダにファイルします.これが私のサンプルです.env.dusk

    Important Make sure to generate the APP_KEY as well. run php artisan key:generate then copy the key from .env to .env.dusk


    APP_NAME=dusk
    APP_ENV=local
    APP_KEY={your-key-here}
    APP_DEBUG=true
    APP_URL=http://127.0.0.1:8000
    
    LOG_CHANNEL=stack
    FLARE_KEY=
    
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=dusktest
    DB_USERNAME=root
    DB_PASSWORD=
    
    BROADCAST_DRIVER=log
    CACHE_DRIVER=array
    QUEUE_CONNECTION=sync
    SESSION_DRIVER=file
    SESSION_LIFETIME=120
    
    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=null
    REDIS_PORT=6379
    
    MAIL_MAILER=array
    MAIL_HOST=smtp.mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    MAIL_ENCRYPTION=null
    MAIL_FROM_NAME="${APP_NAME}"
    MAIL_FROM_ADDRESS="[email protected]"
    
    AWS_ACCESS_KEY_ID=
    AWS_SECRET_ACCESS_KEY=
    AWS_DEFAULT_REGION=us-east-1
    AWS_BUCKET=
    
    PUSHER_APP_ID=
    PUSHER_APP_KEY=
    PUSHER_APP_SECRET=
    PUSHER_APP_CLUSTER=mt1
    
    MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
    MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
    
    

    テストスクリプト
    ランphp artisan dusk:make CommonTest あなたのCLIに、それは内部のテストファイルをつくりますmy-project/tests/Browser/CommonTest.php . その後、テストスクリプト内でテストケースを作成する必要があります.これが作成したテストスクリプトです.
    <?php
    
    namespace Tests\Browser;
    
    use App\Models\User;
    use Illuminate\Foundation\Testing\DatabaseMigrations;
    use Illuminate\Support\Facades\Artisan;
    use Laravel\Dusk\Browser;
    use Tests\DuskTestCase;
    
    class CommonTest extends DuskTestCase
    {
        use DatabaseMigrations;
    
        /**
         * Can Login and see Dashboard
         *
         * @return void
         */
        public function testCanLoginAndSeeDashboard()
        {
            //Seed dummy user data
            Artisan::call('db:seed');
            $user = User::first();
            $this->browse(function ($first) use ($user){
                $first->loginAs($user)
                      ->visit('/dashboard')
                      ->assertSee('Dashboard');
            });
        }
    
        /**
         * Can Login and see Developer Portal
         *
         * @return void
         */
        public function testCanLoginAndSeeDeveloperPortal()
        {
            //Seed dummy user data
            Artisan::call('db:seed');
            $user = User::first();
            $this->browse(function ($first) use ($user){
                $first->loginAs($user)
                      ->visit('/developer')
                      ->assertSee('Connective Exchange');
            });
        }
    
        /**
         * Can Login and see Administration Panel
         *
         * @return void
         */
        public function testCanLoginAndSeeAdministrationPanel()
        {
            //Seed dummy user data
            Artisan::call('db:seed');
            $user = User::first();
            $this->browse(function ($first) use ($user){
                $first->loginAs($user)
                      ->visit('/admin')
                      ->assertSee('Resources');
            });
        }
    }
    
    

    アクションワークフロー
    したがって、基本的にあなたがgithubアクションに精通しているなら、Githubアクションワークフロースクリプトは中になければなりませんmy-project/.github/workflows/actions.yml 必要に応じてファイルを名前変更できます.
    # my-project/.github/workflows/actions.yml
    name: Unit Test
    
    on:
      push:
        branches: [develop]
      pull_request:
        branches: [master, develop]
    
    jobs:
      PHPUnit:
        runs-on: ubuntu-latest
        services:
          mysql:
            image: mysql:8.0.21
            env:
              MYSQL_ALLOW_EMPTY_PASSWORD: yes
              MYSQL_DATABASE: dusktest
            ports:
              - 3306:3306
            options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
    
        steps:
          - uses: actions/checkout@v2
          - name: Configure Application
            run: bin/ci
          - name: Configure Laravel Dusk
            run: bin/ci-dusk
          - name: Execute Dusk tests via PHPUnit
            run: php artisan dusk
    
    
    スクリプトの作業を確実にするために、このbashファイルのいくつかを作成しなければなりません.
    # my-project/bin/ci
    
    #!/usr/bin/env bash
    
    cp .env.example .env
    composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
    chmod -R 777 storage bootstrap/cache
    php artisan key:generate
    php artisan config:clear
    
    
    # my-project/bin/ci-dusk
    
    #!/usr/bin/env bash
    
    php artisan dusk:chrome-driver `/opt/google/chrome/chrome --version | cut -d " " -f3 | cut -d "." -f1`
    chmod -R 0755 vendor/laravel/dusk/bin/
    php artisan serve  > /dev/null 2>&1 &
    curl localhost:8000 &
    ./vendor/laravel/dusk/bin/chromedriver-linux > /dev/null 2>&1 &
    
    
    Simpy Githubにあなたのコードをプッシュし、それが行くには良いはずです!お読みありがとうございます.
    佳作
  • Nasrul Hazim (ワークフローの設定を支援する)