ラボ > Laravel、Lumen:テスト

laravel duskの手動インストール

composerでインストールしようとしたらエラーになって解決できなかった...

作成日:2025-04-14, 更新日:2025-04-16

手動インストール

  1. ソースを落とす: https://github.com/laravel/dusk/releases(v8系がLaravel8/9、v9系はLaravel10)
  2. 「packages/laravel/dusk」にまるっとコピー
  3. 「packages/laravel/dusk/src/*」を「app/Dusk」に移動
  4. 「packages/laravel/dusk/stubs/phpunit.xml」を「phpunit.dusk.xml」にリネームして移動(※「phpunit.xml」と同じ場所に移動)
  5. 各ファイルの修正
  6. セキュリティ的な意味で対応: .gitignore
  7. コマンド実行
  8. テストファイル作成の前の準備

各ファイルの修正

composer.json

{
  // 省略
  "repositories": [
    {
    "type": "path",
    "url": "./packages/laravel/dusk",
    "options": {
      "symlink": false
    }
    }
  ],
  "require-dev": {
    // 省略
    "laravel/dusk": "*"
  },
  "autoload": {
    "psr-4": {
    // 省略
      "Laravel\\Dusk\\": "app/Dusk/"
    }
  },
  // 省略
}

app/Providers/AppServiceProvider.php

// 省略
use Laravel\Dusk\DuskServiceProvider;
// 省略
class AppServiceProvider extends ServiceProvider {
  public function register() {
    // 省略
    if ($this->app->environment('local', 'testing')) {
      $this->app->register(DuskServiceProvider::class);
    }
  }

セキュリティ的な意味で対応: .gitignore

本番環境にインストールするとセキュリティ的に望ましくないとのこと

.gitでソース管理しているのでdusk関連のファイルを監視対象外にしておく

/packages/laravel/dusk
/app/Dusk
phpunit.dusk.xml

▼本番環境で叩くとエラーになるらしい

> composer install --no-dev

→本番環境でcomposerのコマンドは叩く予定が無いので問題なしとする

コマンド実行

> composer dump-autoload

artisanにduskが登録されているか確認

> php artisan list | findstr dusk

テストファイル作成の前の準備

  • 大元になるほうのファイル
  • 各テストファイル

大元になるほうのファイル

▼tests/DuskTestCase.php(※tests/TestCase.phpを複製して、useを書き換え。クラス名とファイル名を揃える)

<?php

namespace Tests;

// use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use App\Dusk\TestCase;

abstract class DuskTestCase extends TestCase
{
    use CreatesApplication;
}

各テストファイル

▼tests/Browser/LoginTest.php

<?php

namespace Tests\Browser;

// use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestBase\DuskTestCase;

class LoginTest extends DuskTestCase
{

	public function test_login()
	{
		$this->browse(function (Browser $browser) {
			$browser->visit(route('login'))
				->type('email', 'user@example.com')
				->type('password', 'secret')
				->press('ログイン');

			$browser->assertPathIs('/dashboard')
				->assertSee('ようこそ');
		});
	}
}

通常のインストール方法

> composer require --dev laravel/dusk

私の場合: インストール失敗から挫折するまで試した内容

Windows、Xamppという環境

インストールしようとしたらエラーになった

> composer require --dev laravel/dusk
https://repo.packagist.org could not be fully loaded (curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: unable to get local issuer certificate), package information was loaded from the local cache and may be out of date

In CurlDownloader.php line 372:

  curl error 60 while downloading https://repo.packagist.org/p2/laravel/dusk.json: SSL certificate problem: unable to
   get local issuer certificate

信頼する「ルート証明書」がない or 認識されていないということらしく、「cacert.pem」が必要とのこと

対応

  • ダウンロードしてきて、「C:\cacert.pem」となるようにファイルを置く
  • php.iniを修正
    curl.cainfo = "C:\cacert.pem"
    openssl.cafile = "C:\cacert.pem"
  • 設定の確認
    >php -i | findstr "curl.cainfo"
  • composerのキャッシュをクリアして、再度、インストール
    > composer clear-cache
    > composer require --dev laravel/dusk
  • 実行結果はエラー。「curl error 60~」と同じ内容

TLSをいったん無効にしてインストール

  • TLSをいったん無効
    > composer config --global disable-tls true
    > composer config --global secure-http false
  • 再度、インストール
    > composer require --dev laravel/dusk
  • 実行結果はエラー。「curl error 60~」と同じ内容
  • TLSを復活
    > composer config --global disable-tls false
    > composer config --global secure-http true
  • 設定の確認
    > composer config --global --list

    ▼下記記述の存在を確認する

    disable-tls = false
    secure-http = true

Composerの動作確認、php.iniの確認

「SSL certificate problem」が出ていないことを確認したい

> composer diagnose

→「SSL certificate problem」は出ていた

php.iniを確認

▼php.ini自体のPATHの確認

> php -i | findstr "Loaded Configuration File"

→「Loaded Configuration File => C:\xampp\php\php.ini」と私の環境通りの結果

▼表示された結果に含まれていた「SSL_CERT_FILE」に値が設定されていた。インストールしている別のアプリが設定しているっぽい

SSL_CERT_FILE => C:\●●●\●●●\cacert.pem

SSL_CERT_FILEを一時無効化して、再度インストール

> set SSL_CERT_FILE=
> composer clear-cache
> composer require --dev laravel/dusk

※一時無効なので、端末ウィンドウを再起動すればSSL_CERT_FILEは復活

インスト結果は「curl error 60~」と同じ内容

手動インストール

  • ソースをDLして全ファイルを「packages/laravel/dusk」に移動
  • composer.jsonの修正
    // 省略
    "repositories": [
      {
      "type": "path",
      "url": "packages/laravel/dusk"
      }
    ],
    "require-dev": {
      // 省略
      "laravel/dusk": "*"
    }
    // 省略
  • インストールコマンドを叩く
    > php artisan dusk:install

    ▼結果はエラー

    ERROR  There are no commands defined in the "dusk" namespace.

PATHの読み込み

composerコマンドを叩くのが正解だけど「curl error 60~」となるので強制読み込み

// 省略
use Laravel\Dusk\DuskServiceProvider;
// 省略
  public function register()
  {
    // 省略
    if ($this->app->environment('local', 'testing')) {
      $this->app->register(DuskServiceProvider::class);
    }
  }
// 省略

オートロードを再生成

$ php artisan clear-compiled

結果はエラー

   Error

  Class "App\Providers\DuskServiceProvider" not found

...このあと、冒頭の手動設定でインストールは完了