🌟

Laravel Promptのテスト

2024/05/11に公開

Laravel 10.x から導入されたPromptのテストを書いてみる

https://laravel.com/docs/11.x/prompts

Text

use function Laravel\Prompts\text;
 
$name = text('What is your name?');
$this->info('Your Name ' . $name );

test

\Laravel\Prompts\Prompt::fallbackWhen(true); // これが無いとエラーになる

$this->artisan('test-command')
    ->expectsQuestion('What is your name?', 'UNILORN')
    ->expectsOutput('Your Name UNILORN')
    ->assertExitCode(0);

Text以外でも基本的にはこれで大抵動く。
Selectなどの選択形式のものも含めて動作するが、選択肢のテストもしたいなら以下のような方法が良い

Select

use function Laravel\Prompts\select;
 
$role = select(
    'What role should the user have?',
    ['Member', 'Contributor', 'Owner'],
);
$this->info('Selected ' . $role );

test

\Laravel\Prompts\Prompt::fallbackWhen(true); // これが無いとエラーになる

$this->artisan('test-command')
    ->expectsChoice('What role should the user have?', 'Contributor', ['Member', 'Contributor', 'Owner'])
    ->expectsOutput('Selected Contributor')
    ->assertExitCode(0);

テストカバレッジにもしっかり反映される。
たまに動かないもの Search などがありましたが、、
expectsQuestion で代用しました。

GitHubで編集を提案

Discussion