2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

artisan dusk コマンドではなく phpunit コマンドでLaravelDuskを実行してしまうと挙動がおかしくなる

Posted at

実行前にdusk用の設定ファイルを読み込んだりしているだけで、php artisan duskで最終的に実行されるのはphpunitです。

なので、以下のコマンドどちらでもテストが実行されてしまいます。
ただ設定ファイルを読み込んでくれないので、テスト用DBを向いてくれなかったりと挙動がおかしくなってしまいます。

# 正しいコマンド
$ php artisan dusk tests/Browser/Hoge/HogeTest.php
# 間違ったコマンド、でもExceptionなどは発生しない
$ ./vendor/bin/phpunit tests/Browser/Hoge/HogeTest.php

この打ち間違いに気が付かないで、しばらくハマってしまうことが何度かありました。。。
もう同じことを繰り返したくないのでチェック処理を組み込みます。

php artisan duskの実体はDuskCommand.phpです。
DuskCommand.phpからphpunitを実行する直前に既存.env.env.backupに退避するという処理が動くのでこのファイルの存在有無を判定します。

LaravelDusk用のTestCaseクラスを作成していると思うので、そちらのsetUpに以下を組み込みます。

DuskTestCase.php
namespace Tests\Browser;

use Laravel\Dusk\TestCase as BaseTestCase;

class DuskTestCase extends BaseTestCase
    public function setUp()
    {
        parent::setUp();
        // artisan dusk ではなく phpunit コマンドで実行してしまうことを防止。少々乱暴だが.env.backupが作成されているかどうかで判定する
        // 現在の.envと.env.dusk.XXXが完全一致する場合は.env.backupが作成されないがそのような状況はまず起こらない
        if (!file_exists(base_path('.env.backup'))) {
            $this->fail('phpunitコマンドではなくartisan duskコマンドで実行してください。');
        }
    }

注意点

ソースコード中のコメントにも書いてありますが、LaravelDusk実行時に使用するenvファイル.env.dusk.xxx.envの内容が一致する場合は.env.backupは作成されませんので、この判定はうまく動かなくなります。
ただし、テスト用DBを使用したり、各種ドライバをテスト用のものに変更するなどしてテストを書くことがほとんどなのでこの一致するという状況はまず起こらないと考えます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?