Щоб почати, давайте розглянемо, як робити твердження щодо коду виходу команди Artisan. Для цього ми будемо використовувати метод artisan, щоб викликати команду Artisan з нашого тесту. Потім ми використаємо метод assertExitCode, щоб стверджувати, що команда завершилася з певним кодом виходу:
test('console command', function () {
$this->artisan('inspire')->assertExitCode(0);
});
/**
* Тест консольної команди.
*/
publicfunctiontest_console_command(): void
{
$this->artisan('inspire')->assertExitCode(0);
}
Ви можете використовувати метод assertNotExitCode, щоб перевірити, що команда не завершилася з певним кодом виходу:
$this->artisan('inspire')->assertNotExitCode(1);
Звичайно, всі термінальні команди зазвичай завершуються зі статус-кодом 0, коли вони успішні, і з ненульовим кодом виходу, коли вони не успішні. Тому, для зручності, ви можете використовувати твердження assertSuccessful та assertFailed, щоб перевірити, чи завершилася дана команда з успішним кодом виходу чи ні:
Laravel дозволяє легко "імітувати" введення користувача для ваших консольних команд, використовуючи метод expectsQuestion. Крім того, ви можете вказати код виходу та текст, який ви очікуєте, що буде виведено консольною командою, використовуючи методи assertExitCode та expectsOutput. Наприклад, розгляньте наступну консольну команду:
Artisan::command('question', function () {
$name = $this->ask('Як вас звати?');
$language = $this->choice('Якій мові ви надаєте перевагу?', [
'PHP',
'Ruby',
'Python',
]);
$this->line('Ваше ім’я — '.$name.' і ви надаєте перевагу '.$language.'.');
});
Ви можете перевірити цю команду за допомогою наступного тесту:
->expectsQuestion('Якій мові ви надаєте перевагу?', 'PHP')
->expectsOutput('Ваше ім’я — Тейлор Отвелл, і ви надаєте перевагу PHP.')
->doesntExpectOutput('Ваше ім’я — Тейлор Отвелл, і ви надаєте перевагу Ruby.')
->assertExitCode(0);
}
Якщо ви використовуєте функції search або multisearch, надані Laravel Prompts, ви можете використовувати твердження expectsSearch для імітації введення користувача, результатів пошуку та вибору:
Якщо ваша команда відображає таблицю інформації за допомогою методу Artisan table, може бути незручно писати очікування виводу для всієї таблиці. Замість цього ви можете використовувати метод expectsTable. Цей метод приймає заголовки таблиці як перший аргумент і дані таблиці як другий аргумент:
За замовчуванням події Illuminate\Console\Events\CommandStarting та Illuminate\Console\Events\CommandFinished не відправляються під час виконання тестів вашого застосунку. Однак, ви можете увімкнути ці події для певного тестового класу, додавши трейта Illuminate\Foundation\Testing\WithConsoleEvents до класу: