🌟
Laravel Promptのテスト
Laravel 10.x から導入されたPromptのテストを書いてみる
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
で代用しました。
Discussion