作成日:2025-04-14, 更新日:2025-04-16
手動インストール
- ソースを落とす: https://github.com/laravel/dusk/releases(v8系がLaravel8/9、v9系はLaravel10)
- 「packages/laravel/dusk」にまるっとコピー
- 「packages/laravel/dusk/src/*」を「app/Dusk」に移動
- 「packages/laravel/dusk/stubs/phpunit.xml」を「phpunit.dusk.xml」にリネームして移動(※「phpunit.xml」と同じ場所に移動)
- 各ファイルの修正
- セキュリティ的な意味で対応: .gitignore
- コマンド実行
- テストファイル作成の前の準備
各ファイルの修正
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
> composer config --global disable-tls true > composer config --global secure-http false
> composer require --dev laravel/dusk
> composer config --global disable-tls false > composer config --global secure-http true
> composer config --global --list
▼下記記述の存在を確認する
disable-tls = false secure-http = true
「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の読み込み
// 省略
"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.
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
...このあと、冒頭の手動設定でインストールは完了