[Laravel] Dusk がうまく動かない
環境情報 (問題発生時)
- Laravel 5.8
- Chrome (cask でインストールした)
- 仮想環境は使っていない
表示されたエラー
❯ php artisan dusk
PHPUnit 7.5.9 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 3.47 seconds, Memory: 14.00 MB
There was 1 error:
1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\SessionNotCreatedException: session not created
from disconnected: unable to connect to renderer
(Session info: headless chrome=78.0.3904.108)
(Driver info: chromedriver=78.0.3904.105 (60e2999-refs/branch-heads/3904@{#877}),platform=Mac OS X 10.14.6 x86_64)
/vendor/facebook/webdriver/lib/Exception/WebDriverException.php:154
/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:331
/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:144
/tests/DuskTestCase.php:40
/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:192
/vendor/laravel/framework/src/Illuminate/Support/helpers.php:754
/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:193
/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:93
/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:64
/tests/Browser/ExampleTest.php:21
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
試したこと 1: Chrome を dmg でインストールし直す
Chrome を cask でインストールしたことが原因かもしれないと思い、Chrome を dmg で再インストールした。 しかしそんなはずもなく、結果は変わらず。
試したこと 2: Safari を使った
Chrome でダメならと、Safari で試してみた。 しかし結果は変わらず。
ちなみに、Safari で Dusk を使うためには新たにパッケージをインストールする。
$ composer require appstract/laravel-dusk-safari --dev
試したこと 4: Docker 上でやってみた
laradock で Docker 環境を構築して、そこで Dusk を動かしてみた。 すると、テストは通らなかったものの問題なく実行された様子。
原因はわからないが、ホスト OS が悪さをしていたらしい。
試したこと 5: APP_URL を変更した
Dusk が動いたのはいいが、テストが通らないのは困るので、その理由を探った。
原因は、.env
の APP_URL
に指定したポート番号が正しくないことだった。
ポート番号が正しくないと、間違ったページが表示され、テストも通らない。
今回は Docker を使ったので localhost:8080
が正しいが、Docker を使っていないときの localhost
のままにしていた。
これを直すとテストが通った
結論
Docker 上なら Dusk が使える。 根本的な原因は不明。