如何在Laravel編寫測試?
使用Laravel的內置phpunit.xml和.env.testing設置測試環境,並在內存中使用SQLite進行測試。 2。編寫功能測試以使用$ this-> post()和assertredirect()之類的幫助者來測試完整的HTTP交互。 3。為孤立的類(例如服務)編寫單元測試,以確保它們快速並且除非必要,否則它們不依賴數據庫。 4。使用Laravel工廠和刷新Database特徵來生成和管理測試數據。 5。使用JSON()方法測試API端點,並主張JSON響應,如果需要,使用Sanctum進行身份驗證。 6.遵循最佳實踐,例如清晰的測試名稱,每次測試一個主張,並考慮使用害蟲PHP進行清潔劑語法。從功能測試和利用Laravel的測試工具開始可顯著提高應用程序可靠性。
由於對Phpunit和特定於Laravel的測試助手的內置支持,在Laravel的寫作測試非常簡單。 Laravel鼓勵兩個功能測試(測試應用程序的部分如何一起工作)和單元測試(隔離單個類或功能)。這是入門和編寫有效測試的方法。

✅1。設置您的測試環境
Laravel帶有一個phpunit.xml
文件和一個tests
目錄。
-
測試文件進入
tests/Feature
和tests/Unit
目錄。 - 使用SQLite進行測試 - 它很快並且可以在內存中工作。
- 更新您的
.env.testing
文件(如果不存在(如果不存在)創建)以設置DB連接:
db_connection = sqlite db_database =:內存:
使用:

PHP手工測試
或直接使用phpunit:
./vendor/bin/phpunit
✅2。寫作功能測試(大多數情況下建議)
功能測試檢查完整的HTTP路由和用戶交互。

示例:測試用戶可以登錄
// tests/feature/logintest.php 使用Illuminate \ Foundation \ Testing \ RefreshDatabase; 使用測試\ TestCase; 類logintest擴展了測試櫃 { 使用RefreshDatabase; 公共功能test_user_can_login_with_correct_credentials() { $ user = \ app \ models \ user :: factory() - >創建([[ '電子郵件'=>'test@example.com', '密碼'=> bcrypt('密碼'), ); $ revyse = $ this-> post('/login',[ '電子郵件'=>'test@example.com', '密碼'=>'密碼', ); $ wendesp--> assertredirect('/dashboard'); $ this-> assertauthenticatedas($ user); } 公共功能test_user_cannot_login_with_invalid_password() { $ user = \ app \ models \ user :: factory() - >創建([[ '電子郵件'=>'test@example.com', '密碼'=> bcrypt('密碼'), ); $ revyse = $ this-> post('/login',[ '電子郵件'=>'test@example.com', 'passwass'=>'錯誤password', ); $ wendesp--> suspertsessionhaserrors('email'); $ this-> assertguest(); //用戶未登錄 } }
關鍵幫助者:
-
$this->get('/url')
,$this->post('/url', $data)
-
assertStatus(200)
,assertRedirect()
,assertSee()
-
assertValid()
/assertInvalid()
用於形式驗證 assertDatabaseHas('users', ['email' => '...'])
✅3。寫作單位測試
單位測試專注於作業,服務或助手等單一類。
示例:測試自定義服務類
// app/services/orderservice.php 班訂單服務 { 公共功能getTotal($項目) { 返回收集($ item) - > sum(fn($ item)=> $ item ['price'] * $ item ['ventity']); } } // tests/unit/unit/orderServicEtest.php 使用app \ services \ orderService; 使用測試\ TestCase; 班級訂購儀擴展了測試櫃 { 公共功能test_calculates_total_correctly() { $ service = new orderService(); $ items = [ ['Price'=> 10,'數量'=> 2], ['價格'=> 5,'數量'=> 4], ]; $ total = $ service-> getTotal($ items); $ this-> assertequals(40,$總計); } }
⚠️注意:除非需要,否則單位測試不使用
RefreshDatabase
。他們應該快速和孤立。
✅4。使用工廠和數據庫測試
Laravel工廠有助於種子測試數據。
使用app \ models \ user; 使用Illuminate \ Foundation \ Testing \ RefreshDatabase; 公共功能test_user_can_view_their_profile() { $ user = user :: factory() - > create(); $ revyse = $ this-> actingas($ user) - > get('/profile'); $ wendesp--> AssertStatus(200); $ wendesp--> assertsee($ user-> name); }
每次測試後使用RefreshDatabase
重置DB(每個測試套件一次遷移)。
✅5。測試API端點
對於JSON API,請使用json()
和主張JSON響應。
公共功能test_api_returns_user_data() { $ user = user :: factory() - > create(); $ wendesp = $ this-> actingas($ user,'api') - > json('get','/api/user'); $ RESPONDS-> ASSERTSTATUS(200) - > assertjson(['id'=> $ user-> id]); }
或使用Laravel Sanctum:
使用Laravel \ Sanctum \ Sanctum; 公共功能test_protected_api_route() { $ user = user :: factory() - > create(); Sanctum :: Actingas($用戶); $ this-> get('/api/dashboard') - > assertok(); }
✅6。最佳實踐
- 使用
RefreshDatabase
而不是清潔狀態的DatabaseMigrations
或DatabaseTransactions
。 - 名稱測試清楚:
it_returns_403_for_unauthorized_users
而不是testSomething()
。 - 通過測試方法測試一件事。
- 使用害蟲PHP (可選):Laravel現在支持害蟲- 一種更優雅的語法:
// Pestphp樣式 它('Westape page',function(){ $ this-> get('/') - > assertStatus(200); });
基本上,只需從路線的功能測試開始,使用工廠,然後依靠Laravel的助手。這並不復雜 - 但在長期應用可靠性方面有很大的不同。
以上是如何在Laravel編寫測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Laravel的配置緩存通過合併所有配置文件為一個緩存文件來提升性能。在生產環境中啟用配置緩存可減少每次請求時的I/O操作和文件解析,從而加快配置加載速度;1.應在部署應用、配置穩定且無需頻繁更改時啟用;2.啟用後修改配置需重新運行phpartisanconfig:cache才會生效;3.避免在配置文件中使用依賴運行時條件的動態邏輯或閉包;4.排查問題時應先清除緩存、檢查.env變量並重新緩存。

UseMockeryforcustomdependenciesbysettingexpectationswithshouldReceive().2.UseLaravel’sfake()methodforfacadeslikeMail,Queue,andHttptopreventrealinteractions.3.Replacecontainer-boundserviceswith$this->mock()forcleanersyntax.4.UseHttp::fake()withURLp

創建referrals表記錄推薦關係,包含推薦人、被推薦人、推薦碼及使用時間;2.在User模型中定義belongsToMany和hasMany關係以管理推薦數據;3.用戶註冊時生成唯一推薦碼(可通過模型事件實現);4.註冊時通過查詢參數捕獲推薦碼,驗證後建立推薦關係並防止自薦;5.當被推薦用戶完成指定行為(如下單)時觸發獎勵機制;6.生成可分享的推薦鏈接,可使用Laravel簽名URL增強安全性;7.在儀表板展示推薦統計信息,如總推薦數和已轉化數;必須確保數據庫約束、會話或Cookie持久化、

checkphp> = 8.1,作曲家和韋伯佛; 2.cleteproeateprojectandruncomposerinstall; 3.copy.env.exampleto.envandrunphpartisankey :生成; 4.setDatabasecredentialsin.envandrunphpartisanmigrate-seed; 5.StartServerServerWithPhpartisanServe; 6.optionallyrunnnpmins

創建seeder文件:使用phpartisanmake:seederUserSeeder生成seeder類,並在run方法中通過模型工廠或數據庫查詢插入數據;2.在DatabaseSeeder中調用其他seeder:通過$this->call()按順序註冊UserSeeder、PostSeeder等,確保依賴關係正確;3.運行seeder:執行phpartisandb:seed運行所有註冊的seeder,或使用phpartisanmigrate:fresh--seed重置並重新填充數據;4

創建新Laravel項目並啟動服務;2.生成模型、遷移和控制器並運行遷移;3.在routes/api.php中定義RESTful路由;4.在PostController中實現增刪改查方法並返回JSON響應;5.使用Postman或curl測試API功能;6.可選地通過Sanctum添加API認證;最終得到一個結構清晰、功能完整且可擴展的LaravelRESTAPI,適用於實際應用。

Chooseafeatureflagstrategysuchasconfig-based,database-driven,orthird-partytoolslikeFlagsmith.2.Setupadatabase-drivensystembycreatingamigrationforafeature_flagstablewithname,enabled,andrulesfields,thenrunthemigration.3.CreateaFeatureFlagmodelwithfilla

InstallLighthouseviaComposerusingcomposerrequirenuwave/lighthouse.2.Publishconfigurationandschemafileswithphpartisanvendor:publish--provider="Nuwave\Lighthouse\LighthouseServiceProvider".3.DefineyourGraphQLschemaingraphql/schema.graphqlusin
