Readouble

Laravel 11.x コンソールテスト

イントロダクションIntroduction

Laravelは、HTTPテストを簡素化することに加え、アプリケーションのカスタムコンソールコマンドをテストするためのシンプルなAPIも提供します。In addition to simplifying HTTP testing, Laravel provides a simple API for testing your application's custom console commands[/docs/{{version}}/artisan].

実行成功/失敗のアサートSuccess / Failure Expectations

手始めに、Artisanコマンドの終了コードをアサートする方法を見てみましょう。それには、artisanメソッドを使用して、テストからArtisanコマンドを呼び出します。それから、assertExitCodeメソッドを使用して、指定した終了コードでコマンドが完了することをアサートします。To get started, let's explore how to make assertions regarding an Artisan command's exit code. To accomplish this, we will use the artisan method to invoke an Artisan command from our test. Then, we will use the assertExitCode method to assert that the command completed with a given exit code:

Pest
test('console command', function () {
    $this->artisan('inspire')->assertExitCode(0);
});
PHPUnit
/**
 * コンソールコマンドのテスト
 */
public function test_console_command(): void
{
    $this->artisan('inspire')->assertExitCode(0);
}

コマンドが指定コードで終了しないことをアサートするには、assertNotExitCodeメソッドを使用します。You may use the assertNotExitCode method to assert that the command did not exit with a given exit code:

$this->artisan('inspire')->assertNotExitCode(1);

もちろん、すべてのターミナルコマンドは通常、成功した場合に0のステータスコードで終了し、成功しなかった場合には0以外の終了コードで終了します。したがって、使い勝手が良いようにassertSuccessfulassertFailedのアサーションを利用し、コマンドが成功の終了コードで終了した/終了しなかったことをアサートできます。Of course, all terminal commands typically exit with a status code of 0 when they are successful and a non-zero exit code when they are not successful. Therefore, for convenience, you may utilize the assertSuccessful and assertFailed assertions to assert that a given command exited with a successful exit code or not:

$this->artisan('inspire')->assertSuccessful();

$this->artisan('inspire')->assertFailed();

入力/出力の期待値Input / Output Expectations

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 prefer?', [
        'PHP',
        'Ruby',
        'Python',
    ]);

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

このコマンドは以下のように、テストしてください。You may test this command with the following test:

Pest
test('console command', function () {
    $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);
});
PHPUnit
/**
 * コンソールコマンドのテスト
 */
public function test_console_command(): void
{
    $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);
}

Laravel Promptsが提供する、searchmultisearch関数を使用している場合、expectsSearchアサートを使用してユーザーの入力、検索結果、選択をモックできます。If you are utilizing the search or multisearch functions provided by Laravel Prompts[/docs/{{version}}/prompts], you may use the expectsSearch assertion to mock the user's input, search results, and selection:

Pest
test('console command', function () {
    $this->artisan('example')
         ->expectsSearch('What is your name?', search: 'Tay', answers: [
            'Taylor Otwell',
            'Taylor Swift',
            'Darian Taylor'
         ], answer: 'Taylor Otwell')
         ->assertExitCode(0);
});
PHPUnit
/**
 * コンソールコマンドのテスト
 */
public function test_console_command(): void
{
    $this->artisan('example')
         ->expectsSearch('What is your name?', search: 'Tay', answers: [
            'Taylor Otwell',
            'Taylor Swift',
            'Darian Taylor'
         ], answer: 'Taylor Otwell')
         ->assertExitCode(0);
}

また、doesntExpectOutputメソッドを使い、コンソールコマンドが出力を生成しないこともアサートできます。You may also assert that a console command does not generate any output using the doesntExpectOutput method:

Pest
test('console command', function () {
    $this->artisan('example')
         ->doesntExpectOutput()
         ->assertExitCode(0);
});
PHPUnit
/**
 * コンソールコマンドのテスト
 */
public function test_console_command(): void
{
    $this->artisan('example')
            ->doesntExpectOutput()
            ->assertExitCode(0);
}

expectsOutputToContaindoesntExpectOutputToContainメソッドは、出力の一部に対してアサートするために使います。The expectsOutputToContain and doesntExpectOutputToContain methods may be used to make assertions against a portion of the output:

Pest
test('console command', function () {
    $this->artisan('example')
         ->expectsOutputToContain('Taylor')
         ->assertExitCode(0);
});
PHPUnit
/**
 * Test a console command.
 */
public function test_console_command(): void
{
    $this->artisan('example')
            ->expectsOutputToContain('Taylor')
            ->assertExitCode(0);
}

確認の期待Confirmation Expectations

「はい」または「いいえ」の回答の形式で確認を期待するコマンドを作成する場合は、expectsConfirmationメソッドを使用できます。When writing a command which expects 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);

テーブルの期待Table Expectations

コマンドがArtisanのtableメソッドを使用して情報のテーブルを表示する場合、テーブル全体の出力期待値を書き込むのは面倒な場合があります。代わりに、expectsTableメソッドを使用できます。このメソッドは、テーブルのヘッダを最初の引数として受け入れ、テーブルのデータを2番目の引数として受け入れます。If your command displays a table of information using Artisan's table method, it can be cumbersome to write output expectations for the entire table. Instead, you may use the expectsTable method. This method accepts the table's headers as its first argument and the table's data as its second argument:

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

コンソールイベントConsole Events

デフォルトでは、アプリケーションのテスト実行中は、Illuminate\Console\Events\CommandStartingIlluminate\Console\Events\CommandFinishedはデフォルトでディスパッチしません。しかし、テストクラスへIlluminate\Foundation\Testing\WithConsoleEventsトレイトを追加すれば、これらのイベントを有効にできます:By default, the Illuminate\Console\Events\CommandStarting and Illuminate\Console\Events\CommandFinished events are not dispatched while running your application's tests. However, you can enable these events for a given test class by adding the Illuminate\Foundation\Testing\WithConsoleEvents trait to the class:

Pest
<?php

use Illuminate\Foundation\Testing\WithConsoleEvents;

uses(WithConsoleEvents::class);

// ...
PHPUnit
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\WithConsoleEvents;
use Tests\TestCase;

class ConsoleEventTest extends TestCase
{
    use WithConsoleEvents;

    // ...
}

章選択

設定

明暗テーマ
light_mode
dark_mode
brightness_auto システム設定に合わせる
テーマ選択
photo_size_select_actual デフォルト
photo_size_select_actual モノクローム(白黒)
photo_size_select_actual Solarized風
photo_size_select_actual GitHub風(青ベース)
photo_size_select_actual Viva(黄緑ベース)
photo_size_select_actual Happy(紫ベース)
photo_size_select_actual Mint(緑ベース)
コードハイライトテーマ選択

明暗テーマごとに、コードハイライトのテーマを指定できます。

テーマ配色確認
スクリーン表示幅
640px
80%
90%
100%

768px以上の幅があるときのドキュメント部分表示幅です。

インデント
無し
1rem
2rem
3rem
原文確認
原文を全行表示
原文を一行ずつ表示
使用しない

※ 段落末のEボタンへカーソルオンで原文をPopupします。

Diff表示形式
色分けのみで区別
行頭の±で区別
削除線と追記で区別

※ [tl!…]形式の挿入削除行の表示形式です。

テストコード表示
両コード表示
Pestのみ表示
PHPUnitのみ表示
OS表示
全OS表示
macOSのみ表示
windowsのみ表示
linuxのみ表示
和文変換

対象文字列と置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)

本文フォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

コードフォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

保存内容リセット

localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。

ヘッダー項目移動

キーボード操作