【Laravel官方導讀】Console測試完整攻略

【Laravel官方導讀】Console測試完整攻略

簡介

除了簡化 HTTP 測試之外, Laravel 為測試用戶輸入的控制台應用提供了簡單的 API 。

期望輸入 / 輸出

Laravel 允許你使用 expectsQuestion() 為控制台命令輕鬆地 「mock」 用戶輸入。此外,還可以使用 assertExitCode() 和 expectsOutput() 指定控制台命令退出碼和期望輸出文字。可以參考下面的命令:

Artisan::command('question', function () {
    $name = $this->ask('What is your name?');

    $language = $this->choice('Which language do you prefer?', [
        'PHP',
        'Ruby',
        'Python',
    ]);

    $this->line('Your name is '.$name.' and you prefer '.$language.'.');
});

你可以參考下面的範例源代碼來測試此命令,該測試使用了 expectsQuestion() . expectsOutput() 和 assertExitCode() :

/**
 * 測試控制台命令.
 *
 * @return void
 */
public function test_console_command()
{
    $this->artisan('question')
         ->expectsQuestion('What is your name?', 'Taylor Otwell')
         ->expectsQuestion('Which language do you prefer?', 'PHP')
         ->expectsOutput('Your name is Taylor Otwell and you prefer PHP.')
         ->doesntExpectOutput('Your name is Taylor Otwell and you prefer Ruby.')
         ->assertExitCode(0);
}

確認預期值

當你寫一個要確認的命令,「yes」 或者 「no」 時,你可以使用 expectsConfirmation() :

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

預期表格

假如你的命令使用 Artisan 的 table() 來顯示資訊表格,若要輸出整個表格,這將會是非常麻煩的。作為替代,你能夠使用 expectsTable(),這個方法接受表格的 header 作為第一個參數而表格的資料作為第二參數

$this->artisan('users:all')
    ->expectsTable([
        'ID',
        'Email',
    ], [
        [1, 'taylor@example.com'],
        [2, 'abigail@example.com'],
    ]);

分享這篇文章:

訂閱電子報,索取 Laravel 學習手冊

價值超過 3000 元,包含常用 Laravel 語法與指令!

Laravel 百萬年薪特訓營

從最基礎的 PHP 語法開始,包含所有你該知道的網頁基礎知識,連同 Laravel 從零開始一直到實戰,最後還將告訴你如何找好工作,讓你及早擁有百萬年薪