iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
Software Development

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

Day 17 跟著官方文件學習Laravel-再戰測試

今天繼續來寫測試啦!!昨天我們測試destory方法後,今天我想寫store的測試。

首先,我們先測試成功的情境。

  • arrange
    設定想要新增的資料

  • act
    Route::post('/user', [UserController::class, 'store']);

  • assert
    {‘success’ => ‘true’}

/**
     * @test
     * @testdox 成功註冊一筆資料
     */
    public function storeSuccess()
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $password = "123Acb_";
        $username = "Jim";

        // act&assert
        $this->postJson("/api/user", [
            'id'=>$id,
            'account'=>$account,
            'password'=>$password,
            'username'=>$username
        ])
        ->assertStatus(200)
        ->assertJson([
            'success' => 'true'
        ]);
    }

再來是寫帳號重複註冊的案例

/**
     * @test
     * 
     */
    public function storeAccountRepeat()
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $password = "123Acb_";
        $username = "Jim";
        User::create([
            'id' => $id,
            'account' => $account,
            'password' => $password,
            'name' => $username
        ]);

        // act&assert
        $this->postJson("/api/user", [
            'id'=>$id,
            'account'=>$account,
            'password'=>$password,
            'username'=>$username
        ])
        ->assertStatus(200)
        ->assertJson([
            'success' => 'false',
            'error'=> '帳號重複註冊'
        ]);
    }

接下來寫的是密碼驗證的測試,這邊想利用data provider去提供一系列不合格的密碼去測試。

首先我們在UserTest寫一個method,提供你想要測試的資料,包含你想測試的所有情境

public function invalidPasswordProvider()
    {
        // 密碼長度不足6位
        yield ["123"];
        // 密碼不含大寫字母
        yield ["123abc_"];
        // 密碼不含小寫字母
        yield ["123ABC_"];
        // 密碼不含數字
        yield ["ABCabc_"];
        // 密碼不含特殊符號
        yield ["ABCabcd"];
    }

再利用dataProvider註解,將資料依序帶入method

/**
     * @test
     * @dataProvider invalidPasswordProvider
     */
    public function storeAccountPasseordInvalid(string $password)
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $username = "Jim";

        // act&assert
        $this->postJson("/api/user", [
            'id'=>$id,
            'account'=>$account,
            'password'=>$password,
            'username'=>$username
        ])
        ->assertStatus(200)
        ->assertJson([
            'success' => 'false',
            'error'=> '密碼需要6位數以上,並且至少包含大寫字母、小寫字母、數字、符號各一'
        ]);
    }

來測試看看!

這邊有看到他幫我們帶入了那五筆資料,且測試成功!


上一篇
Day16 跟著官方文件學習Laravel-初寫測試
下一篇
Day18 跟著官方文件學習Laravel-Mock
系列文
跟著官方文件學習Laravel, 並實作出一個會員登入系統30

尚未有邦友留言

立即登入留言