0%

【Day-25】改造MVC - Controller(單元測試篇)

文章同步於it邦

前言

改造MVC的最後一個章節,單元測試
今天會來說說如何測試實作
今天會示範Laravel

實作

延續昨天的案例,假設我今天有一個註冊會員的Validator需要做驗證
這個function用於驗證帶入的參數分別為member_name、member_email、member_password
規則如下皆為必填、字串
name最長60最短為1
email最長255、要符合email格式並且為唯一值
password只要長度小於255就好
回傳array裡面包含失敗的參數名稱,若驗證成功則為空array

假設我的Validator長這樣

1
2
3
4
5
6
7
8
9
10
public function validatorRequestData(array $request_data): array
{
$validator = $request->validate([
'member_name' => 'required|string|min:1|max:60',
'member_email' => 'required|string|email|max:255|unique:members',
'member_password' => 'required|string|max:255',
]);

return $validator->errors();
}

那我的單元測試會這樣撰寫
先假設我已經寫好Seeder,我目前用好一筆假資料,email已經有人使用123@gmail.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public function testValidatorRequestData()
{
$validator = new SomeValidator();

$data_1 = [
'member_name' => 'Unit testing',
'member_email' => 'Unittesting@email.com',
'member_password' => 'Unittesting',
];

$data_2 = [
'member_name' => '',
'member_email' => '0a',
'member_password' => '1',
];

$data_3 =
'member_name' => [],
'member_email' => '123@gmail.com',
'member_password' => str_pad('', 256, "a");,
];

$err_key_group_1 = $validator->validatorRequestData($data_1);
$err_key_group_2 = $validator->validatorRequestData($data_1);
$err_key_group_3 = $validator->validatorRequestData($data_1);

$this->assertEquals($err_key_group_1, []);
$this->assertEquals($err_key_group_2, ['member_email', 'member_password']);
$this->assertEquals($err_key_group_3, ['member_name', 'member_email', 'member_password']);
}

這樣就寫好單元測試了,這就可以驗證我的function是否有按照我要的樣子輸出

結語

這幾天都是在講一些核心概念跟簡單的實作,明天接著講DI
最後幾天就來說說開發模式吧