Версія фреймворка: 8.x

Консольні тести

Вступ

На додаток до спрощення тестування HTTP, Laravel пропонує простий API для тестування консольних програм, які вимагають введення користувачем.

На додаток до спрощення тестування HTTP, Laravel пропонує простий API для тестування консольних програм, які вимагають введення користувачем.

Очікуваний вхід / вихід

Laravel дозволяє вам легко "висміяти" введення користувачем команд консолі за допомогоюexpectsQuestionметод. Крім того, ви можете вказати код виходу та текст, який, як ви очікуєте, буде виведено командою консолі за допомогоюassertExitCodeіexpectsOutputметоди. Наприклад, розглянемо таку команду консолі:

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методи:

/**
 * 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);