🙄

[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 が動いたのはいいが、テストが通らないのは困るので、その理由を探った。

原因は、.envAPP_URL に指定したポート番号が正しくないことだった。 ポート番号が正しくないと、間違ったページが表示され、テストも通らない。 今回は Docker を使ったので localhost:8080 が正しいが、Docker を使っていないときの localhost のままにしていた。 これを直すとテストが通ったemoji-smile

結論

Docker 上なら Dusk が使える。 根本的な原因は不明。