今天要來寫測試,laravel有提供測試的方法。其中分成Unit及Feature,Unit專注於功能較單一獨立的程式,而Feature則是偏向整合功能型的測試。
首先,先來創建一個測試吧。
php artisan make:test UserTest
我們今天想要測試的是昨天剛寫好的API,我們先以destory這個方法來實測,測的過程中,盡量保持把3A寫出來!
class UserTest extends TestCase
{
use RefreshDatabase;
/**
* @test
*/
public function destorySuccess()
{
//arrange
$id = 10;
$account = "JimChien";
$password = "123Acb_";
$username = "Jim";
User::create([
'id' => $id,
'account' => $account,
'password' => Hash::make($password),
'name' => $username
]);
// act&assert
$this->deleteJson("/api/user/$id")
->assertStatus(200)
->assertJson([
'success' => 'true'
]);
}
}
這邊我們先測當delete成功時回傳success的情境,我們可以利用RefreshDatabase這個trait,在每次測試完就重置資料庫,這樣有助於之前測試用的資料不會影響下一次測試。
Route::delete('/user/{id}', [UserController::class, 'destroy']);
這個route。
3A設定好後,我們來測試看看吧。
接著我們來寫delete失敗的案例
/**
* @test
*/
public function destoryFailed()
{
//arrange
$id = 10;
// act&assert
$this->deleteJson("/api/user/$id")
->assertStatus(200)
->assertJson([
'success' => 'false'
]);
}
這邊我們一樣保持3A,跟success不一樣的是這次沒有先建User了,那就不會delete所以回傳{'success' => 'false'}
這邊我們可以使用testdox去描述我們每個function在測試的情境是什麼,只需在註解中加上@testdox,並在執行指令時加上--testdox,結果如下
OK~今天完成了一小部分的測試,明天再繼續看看測試還有什麼功能吧。