# 前言
學習一個框架, 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 nameexpectsQuestion
: 定義要斷言的 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
留言