Viết chức năng create user
Để có thể viết unit test thì trước hết mình cần cái để test, ở đây mình cần chức năng create user.
UserController
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">store</span><span class="token punctuation">(</span>UserCreateRequest <span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token variable">$user</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">userRepository</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">store</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">route</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'users.edit'</span><span class="token punctuation">,</span> <span class="token variable">$user</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">with</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'messageSuccess'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'This user successfully created'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">QueryException</span> <span class="token variable">$exception</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">back</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">with</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'messageFail'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'Create failed. Something went wrong'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">withInput</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Ở UserController mình viết function store nhận request và sử dụng UserCreateRequest để validate dữ liệu, dùng userRepository để trèn dữ liệu vào database. function store thành công sẽ trả về messageSuccess
UserCreateRequest
UserCreateRequest có nhiệm vụ validate dữ liệu đầu vào
tham khảo thêm tại đây
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 31 32 33 34 35 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">authorize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/** * Get the validation rules that apply to the request. * * @return array */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">rules</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'required|min:5|max:50|'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'required|max:200|unique:users'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'required|min:8|max:50|'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'image'</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">messages</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name.required'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Please enter name'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'name.min'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Name is too short (minimum is 5 characters)'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'name.max'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Name is too long (maximum is 50 characters)'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email.required'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Please enter email'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email.unique'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'This user email has already been used by another user'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email.max'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Email is too long (maximum is 200 characters)'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password.required'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Please enter password'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password.min'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Password is too short (minimum is 8 characters)'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password.max'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'password is too long (maximum is 50 characters)'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar.image'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'The avatar is not in the correct format'</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Trong này ta sẽ thiết lập các rule mà messages tương ứng
UserRepository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">store</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">hasFile</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$path</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">file</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">store</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'public/images'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'avatar'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">strstr</span><span class="token punctuation">(</span><span class="token variable">$path</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'name'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">name</span><span class="token punctuation">;</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'email'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">email</span><span class="token punctuation">;</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'password'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">bcrypt</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">password</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'role'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">role</span><span class="token punctuation">;</span> <span class="token variable">$user</span> <span class="token operator">=</span> User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token variable">$data</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$user</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
UserRepository đảm nhiệm việc sử lý dữ liệu và lưu vào DB.
vậy là đã xong phần create user, giờ bắt tay vào viết test nhé.
Viết unit test create user
cấu trúc thư mục test sẽ như thế này
Chúng ta sẽ tạo thêm file UserControllerTest.php trong feature bằng lệnh
1 2 | php artisan make:test UserControllerTest |
Giờ thì viết test cho từng trường hợp thôi.
- Test trường hợp update thành công
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">testStoreUserSuccessFeature</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token function">factory</span><span class="token punctuation">(</span>User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> UserType<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ADMIN</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// tạo 1 tài khoản admin</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">actingAs</span><span class="token punctuation">(</span><span class="token variable">$admin</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// cho admin đăng nhập vào</span> <span class="token variable">$params</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token double-quoted-string string">"Name Create"</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="70151d11191c30171d11191c5e131f1d">[email protected]</a>'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'12345678'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'1'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar'</span> <span class="token operator">=</span><span class="token operator">></span> UploadedFile<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">fake</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">image</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// những dữ liệu update gửi đi</span> <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">post</span><span class="token punctuation">(</span><span class="token function">route</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'users.store'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// gọi router gửi dữ liêu đến controller</span> <span class="token variable">$response</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">assertRedirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// kiểm tra xem khi thnahf công có chuyển trang không</span> <span class="token punctuation">}</span> |
- Test trường hợp update false khi admin chứa đăng nhập
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">UnauthenticateUserCannotCreateUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token function">factory</span><span class="token punctuation">(</span>User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> UserType<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ADMIN</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$params</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token double-quoted-string string">"Name Create"</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="f89d95999194b89f95999194d69b9795">[email protected]</a>'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'12345678'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'1'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar'</span> <span class="token operator">=</span><span class="token operator">></span> UploadedFile<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">fake</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">image</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">post</span><span class="token punctuation">(</span><span class="token function">route</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'users.store'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$response</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">assertStatus</span><span class="token punctuation">(</span><span class="token number">302</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// kiểm trả xem response có trả về lỗi 302 không </span> <span class="token variable">$response</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">assertRedirect</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'login'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// kiểm trả xem response có rederect về login không</span> <span class="token punctuation">}</span> |
do admin chưa đăng nhập nên response trả về lỗi 302 và redirect về login.
ở trên phần 1 mình có dùng $this->actingAs($admin);
để đăng nhập
- Test trường hợp dữ liệu update false vì có trường name là rỗng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">testCreateUserRequireName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token function">factory</span><span class="token punctuation">(</span>User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> UserType<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ADMIN</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">actingAs</span><span class="token punctuation">(</span><span class="token variable">$admin</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$params</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token keyword">null</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="345159555d58745359555d581a575b59">[email protected]</a>'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'12345678'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'1'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar'</span> <span class="token operator">=</span><span class="token operator">></span> UploadedFile<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">fake</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">image</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">post</span><span class="token punctuation">(</span><span class="token function">route</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'users.store'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">assertStatus</span><span class="token punctuation">(</span><span class="token number">302</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">assertSessionHasErrors</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// kiểm tra xem response có báo lỗi name không</span> <span class="token punctuation">}</span> |
- Test trường hợp dữ liệu update false vì có trường name quá ngắn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">testCreateUserNameMinLength</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token function">factory</span><span class="token punctuation">(</span>User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> UserType<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ADMIN</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">actingAs</span><span class="token punctuation">(</span><span class="token variable">$admin</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$params</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'abc'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="1f7a727e76735f78727e7673317c7072">[email protected]</a>'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'12345678'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'1'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar'</span> <span class="token operator">=</span><span class="token operator">></span> UploadedFile<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">fake</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">image</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">post</span><span class="token punctuation">(</span><span class="token function">route</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'users.store'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">assertStatus</span><span class="token punctuation">(</span><span class="token number">302</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">assertSessionHasErrors</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
- Test avatar không đúng định dạng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">testCreateUserAvatarNotImage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token function">factory</span><span class="token punctuation">(</span>User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> UserType<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token constant">ADMIN</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">actingAs</span><span class="token punctuation">(</span><span class="token variable">$admin</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$params</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token double-quoted-string string">"Name create"</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'email'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token double-quoted-string string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="bdd8d0dcd4d1fddad0dcd4d193ded2d0">[email protected]</a>"</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> Str<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">51</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'role'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'1'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'avatar'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token double-quoted-string string">"fsdsF"</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">post</span><span class="token punctuation">(</span><span class="token function">route</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'users.store'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token variable">$params</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">assertStatus</span><span class="token punctuation">(</span><span class="token number">302</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span><span class="token function">assertSessionHasErrors</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'avatar'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Tương tự test email hay password cũng vậy
Kết bài
Trên đấy là nhưng thứ mình biết về unittest, rất mong nhận được sự góp ý từ mọi người.