Laravel - Testing - Console Tests (官方文件原子化翻譯筆記)

# 前言

學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。



Input / Output Expectations

以下的 Laravel Console Testing example code 的意思是?
  • Example:
    <?php
    // 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.'.');
    });

    // testing method
    public function testConsoleCommand()
    {
    $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);
    }
  • Answer:
    artisan: 指定要斷言的 command name
    expectsQuestion: 定義要斷言的 key (questions), 以及 value (answers)
    expectsOutput: 斷言會有 line, error, info 等 method 的輸出
    doesntExpectOutput: 斷言不可有的 line, error, info 等 method 的輸出
    assertExitCode: 斷言 exit code, 即 $$ 為 0

# Confirmation Expectations

以下的 Laravel Console Testing example code 的意思是?
  • Example:
    <?php
    $this->artisan('module:import')
    ->expectsConfirmation('Do you really wish to run this command?', 'no')
    ->assertExitCode(1);
  • Answer:
    斷言 command confirmation 以及其輸出

# Table Expectations

以下的 Laravel Console Testing example code 的意思是?
  • Example:
    <?php
    $this->artisan('users:all')
    ->expectsTable([
    'ID',
    'Email',
    ], [
    [1, 'taylor@example.com'],
    [2, 'abigail@example.com'],
    ]);
  • Answer:
    斷言 command 為 'users:all', arg1 為 table header, arg2 為 table data
架設一個 NFS Server Recursion (遞迴) 簡介 - PHP 範例

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×