콘솔 테스트

시작하기

Laravel은 HTTP 테스트를 단순하게 할 뿐 아니라 사용자 입력을 요구하는 콘솔 애플리케이션을 테스트하기위한 간단한 API를 제공합니다.

Input / Output 예상하기

Laravel을 사용하면 expectsQuestion 메소드를 사용하여 콘솔 명령에 대한 사용자 입력을 쉽게 "mock" 할 수 있습니다. 또 assertExitCodeexpectsOutput 메소드를 사용하여 콘솔 명령으로 출력 할 것으로 예상되는 종료 코드와 텍스트를 지정할 수 있습니다. 예를 들어 다음과 같은 console 명령을 생각해보십시오.

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 , expectsOutputassertExitCode 메소드를 사용하는 다음 테스트로 이 명령을 테스트 할 수 있습니다.

/**
 * Test a console command.
 *
 * @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);
}

"예" 또는 "아니오" 답변의 형태로 확인을 요구하는 명령을 작성할 때 expectsConfirmation메소드를 사용할 수 있습니다.

$this->artisan('module:import')
    ->expectsConfirmation('Do you really wish to run this command?', 'no')
    ->assertExitCode(1);