iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
Software Development

跟著官方文件學習Laravel, 並實作出一個會員登入系統系列 第 16

Day16 跟著官方文件學習Laravel-初寫測試

今天要來寫測試,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,在每次測試完就重置資料庫,這樣有助於之前測試用的資料不會影響下一次測試。

  • arrange
    我們先初始想要的參數如id, account...等等,接著創建一筆資料,完成arrange
  • act
    我們要測試的目標就是
Route::delete('/user/{id}', [UserController::class, 'destroy']);

這個route。

  • assert
    我們預期他回傳status = 200且回傳{'success' => 'true'}

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~今天完成了一小部分的測試,明天再繼續看看測試還有什麼功能吧。


上一篇
Day15 跟著官方文件學習Laravel-實作API(二)
下一篇
Day 17 跟著官方文件學習Laravel-再戰測試
系列文
跟著官方文件學習Laravel, 並實作出一個會員登入系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言