PHPUnit 自動化測試大作戰【CH27】

更新於 2024/12/17閱讀時間約 6 分鐘

今天就讓我們依照前一天的情境題,來撰寫測試案例函數吧!

這次同樣地,先讓我們規畫擬訂測試案例:

測試案例

使用者註冊:

  1. 使用者可送出註冊資料,系統將建立使用者資料,並送出含有專屬驗證連結之驗證信,當此驗證連結被開啟後,將讓使用者轉為已驗證狀態

請求錯誤的驗證連結:

  1. 錯誤的驗證連結被開啟後,使用者之驗證狀態應保持不變

話不多說,來寫 Code !

測試案例函數實作

  • tests/Feature/UserControllerTest.php
<?php

namespace Tests\Feature;

use App\Mail\VerifyUserMail;

use App\Models\User;

use Illuminate\Foundation\Testing\RefreshDatabase;

use Illuminate\Foundation\Testing\WithFaker;

use Illuminate\Support\Facades\Mail;

use Tests\TestCase;

class UserControllerTest extends TestCase{

use WithFaker;

use RefreshDatabase;

public function testRegisterAndVerifySuccess() {

Mail::fake();

$data = [

'name' => $this->faker->name,

'email' => $this->faker->email,

'password' => $this->faker->password,

]; $response = $this->post(route('register'), $data);

$response->assertOk();

$this->assertDatabaseHas('users', [

'email' => $data['email'],

]); $verifyLink = null;

$userId = null;

Mail::assertSent(VerifyUserMail::class, function ($mail) use (&$verifyLink, &$userId) {

$user = User::first();

$userId = $user->id;

$token = $user->verify_email_token;

$mail->build();

$viewData = $mail->viewData;

$verifyLink = route('verify-user-email', ['token' => $token]);

$assertRecipient = $mail->hasTo($user->email);

$assertVerifyLink = isset($viewData['verifyLink']) &&

$viewData['verifyLink'] === $verifyLink;

return $assertRecipient && $assertVerifyLink;

}); $response = $this->get($verifyLink);

$response->assertOk();

$this->assertDatabaseMissing('users', [

'id' => $userId,

'email_verified_at' => null,

]); } public function testVerifyFailedWhenGotWrongLink() {

$user = User::factory()->create();

$token = $user->verify_email_token . 'x';

$verifyLink = route('verify-user-email', ['token' => $token]);

$response = $this->get($verifyLink);

$response->assertNotFound();

$this->assertDatabaseHas('users', [

'id' => $user->id,

'email_verified_at' => null,

]); }}

在以上程式碼中,我們實作了以下測試案例函數:

  • testRegisterAndVerifySuccess()

在這個測試案例函數中,我們驗證了完整的驗證流程,從使用者送出註冊資料、系統建立使用者資料並寄出驗證信、使用者點選驗證連結、更新使用者驗證時間等。

  • testVerifyFailedWhenGotWrongLink()

在這個測試案例函數中,我們驗證了當不正確的驗證連結被請求時,將不會讓使用者的驗證狀態轉變為已驗證。

以上就是今天的練習,希望對大家有所幫助。

下一篇讓我們探討多重資料庫連線的情境吧!

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

本系列文章目錄

avatar-img
8會員
270內容數
歡迎來到 WilliamP 的沙龍天地,在這裡將與各位讀者探討各種主題,包刮高中數學題庫、PHP開發經驗、LINE聊天機器人開發經驗、書摘筆記等,歡迎交流!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
WilliamP的沙龍 的其他內容
前兩天,我們探討了「網站文章」的情境題;今明兩天,就讓我們探討另一個情境題「會員註冊」吧! 這邊我們同樣假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分,不過會多一個「註冊驗證信」的部分要實作與做測試驗證。 使用案例 使用者可填寫註冊資料後送出資料。 使用者可收到註冊驗證信
今天就讓我們依照前一天的情境題,來撰寫測試案例函數吧! 先讓我們規畫擬訂測試案例: 測試案例 當使用者瀏覽文章清單頁時: 使用者可看到所有文章清單,也就是【文章清單API】要能確實將資料庫內的文章資料,筆數不多不少地回應出來。 當使用者瀏覽單一文章頁時: 使用者可看到該文章資料,也就是【
在前面的篇幅中,與大家分享了許多撰寫 PHPUnit 測試程式碼所需的知識,之後的文章就讓我們來來模擬一些情境題,並在這些情境題底下,實際去設計測試案例函數吧! 作為第一個情境題,我們就選「網站文章」來當作第一個挑戰吧! 這邊我們假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分
今天我們來聊聊覆蓋率報告吧! 何為覆蓋率報告 & 為何需要覆蓋率報告 所謂的覆蓋率報告,指的是能指出我們的專案程式庫,有被測試程式碼實際測試到的部分的佔比有多少。當我們了解有多少程式碼有被覆蓋到,以及有多少程式碼沒被覆蓋到時,理論上我們可以對程式碼是否可正常運作更有信心! 事前準備 先將以
今天讓我們來看 phpunit.xml 吧! phpunit.xml 位在 Laravel 專案根目錄底下,顧名思義,它是一個設定 PHPUnit 執行方式的設定XML檔,PHPUnit 提供了不少設定值可供設定,這邊只提最重要的幾個: stopOnFailure 說明:當此欄位設定為 tru
今天要來為大家介紹 Storage Mocking 及 HTTP Mocking! Storage Mocking 函數 Storage::fake():當我們希望在執行測試目標行為時,想驗證 Storage 各類行為是否符合預期,但又不要真的增刪改檔案時,可在測試程式碼中呼叫此函數。 Upl
前兩天,我們探討了「網站文章」的情境題;今明兩天,就讓我們探討另一個情境題「會員註冊」吧! 這邊我們同樣假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分,不過會多一個「註冊驗證信」的部分要實作與做測試驗證。 使用案例 使用者可填寫註冊資料後送出資料。 使用者可收到註冊驗證信
今天就讓我們依照前一天的情境題,來撰寫測試案例函數吧! 先讓我們規畫擬訂測試案例: 測試案例 當使用者瀏覽文章清單頁時: 使用者可看到所有文章清單,也就是【文章清單API】要能確實將資料庫內的文章資料,筆數不多不少地回應出來。 當使用者瀏覽單一文章頁時: 使用者可看到該文章資料,也就是【
在前面的篇幅中,與大家分享了許多撰寫 PHPUnit 測試程式碼所需的知識,之後的文章就讓我們來來模擬一些情境題,並在這些情境題底下,實際去設計測試案例函數吧! 作為第一個情境題,我們就選「網站文章」來當作第一個挑戰吧! 這邊我們假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分
今天我們來聊聊覆蓋率報告吧! 何為覆蓋率報告 & 為何需要覆蓋率報告 所謂的覆蓋率報告,指的是能指出我們的專案程式庫,有被測試程式碼實際測試到的部分的佔比有多少。當我們了解有多少程式碼有被覆蓋到,以及有多少程式碼沒被覆蓋到時,理論上我們可以對程式碼是否可正常運作更有信心! 事前準備 先將以
今天讓我們來看 phpunit.xml 吧! phpunit.xml 位在 Laravel 專案根目錄底下,顧名思義,它是一個設定 PHPUnit 執行方式的設定XML檔,PHPUnit 提供了不少設定值可供設定,這邊只提最重要的幾個: stopOnFailure 說明:當此欄位設定為 tru
今天要來為大家介紹 Storage Mocking 及 HTTP Mocking! Storage Mocking 函數 Storage::fake():當我們希望在執行測試目標行為時,想驗證 Storage 各類行為是否符合預期,但又不要真的增刪改檔案時,可在測試程式碼中呼叫此函數。 Upl
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Testtesttesttesttesttesttesttesttest Test
改版之後的方格子,找不到圖庫,找不到路徑 只好發個測試廢文
Thumbnail
這是一篇很精彩的測試文章喔!
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Testtesttesttesttesttesttesttesttest Test
改版之後的方格子,找不到圖庫,找不到路徑 只好發個測試廢文
Thumbnail
這是一篇很精彩的測試文章喔!