イントロダクションIntroduction
LaravelではHTTPテストも簡単に行えますが、さらにユーザー入力を尋ねるコンソールアプリケーションテストに対する、シンプルなAPIも提供しています。In addition to simplifying HTTP testing, Laravel provides a simple API for testing console applications that ask for user input.
入出力の期待値Expecting Input / Output
LaravelでexpectsQuestion
メソッドを使用すれば、コンソールコマンドのユーザー入力を簡単に「モック」できます。さらに、終了コードをassertExitCode
メソッドで、コンソールコマンドに期待する出力をexpectsOutput
メソッドでそれぞれ指定することもできます。Laravel allows you to easily "mock" user input for your console commands using the expectsQuestion
method. In addition, you may specify the exit code and text that you expect to be output by the console command using the assertExitCode
and expectsOutput
methods. For example, consider the following console command:
Artisan::command('question', function () {
$name = $this->ask('What is your name?');
$language = $this->choice('Which language do you program in?', [
'PHP',
'Ruby',
'Python',
]);
$this->line('Your name is '.$name.' and you program in '.$language.'.');
});
このコマンドを以下のように、expectsQuestion
、expectsOutput
、assertExitCode
メソッドを活用してテストできます。You may test this command with the following test which utilizes the expectsQuestion
, expectsOutput
, and assertExitCode
methods:
/**
* コンソールコマンドのテスト
*
* @return void
*/
public function testConsoleCommand()
{
$this->artisan('question')
->expectsQuestion('What is your name?', 'Taylor Otwell')
->expectsQuestion('Which language do you program in?', 'PHP')
->expectsOutput('Your name is Taylor Otwell and you program in PHP.')
->assertExitCode(0);
}
"yes"/"no"形態の答えを確認したいコマンドを書いている場合は、expectsConfirmation
メソッドが役に立ちます。When writing a command which expects a confirmation in the form of a "yes" or "no" answer, you may utilize the expectsConfirmation
method:
$this->artisan('module:import')
->expectsConfirmation('Do you really wish to run this command?', 'no')
->assertExitCode(1);