目錄
✅1。設置您的測試環境
✅2。寫作功能測試(大多數情況下建議)
示例:測試用戶可以登錄
關鍵幫助者:
✅3。寫作單位測試
示例:測試自定義服務類
✅4。使用工廠和數據庫測試
✅5。測試API端點
✅6。最佳實踐
首頁 php框架 Laravel 如何在Laravel編寫測試?

如何在Laravel編寫測試?

Jul 31, 2025 am 06:43 AM
laravel 測試

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

如何在Laravel編寫測試?

由於對Phpunit和特定於Laravel的測試助手的內置支持,在Laravel的寫作測試非常簡單。 Laravel鼓勵兩個功能測試(測試應用程序的部分如何一起工作)和單元測試(隔離單個類或功能)。這是入門和編寫有效測試的方法。

如何在Laravel編寫測試?

✅1。設置您的測試環境

Laravel帶有一個phpunit.xml文件和一個tests目錄。

  • 測試文件進入tests/Featuretests/Unit目錄。
  • 使用SQLite進行測試 - 它很快並且可以在內存中工作。
  • 更新您的.env.testing文件(如果不存在(如果不存在)創建)以設置DB連接:
 db_connection = sqlite
db_database =:內存:

使用:

如何在Laravel編寫測試?
 PHP手工測試

或直接使用phpunit:

 ./vendor/bin/phpunit

✅2。寫作功能測試(大多數情況下建議)

功能測試檢查完整的HTTP路由和用戶交互。

如何在Laravel編寫測試?

示例:測試用戶可以登錄

// 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而不是清潔狀態的DatabaseMigrationsDatabaseTransactions
  • 名稱測試清楚: it_returns_403_for_unauthorized_users而不是testSomething()
  • 通過測試方法測試一件事。
  • 使用害蟲PHP (可選):Laravel現在支持害蟲- 一種更優雅的語法:
 // Pestphp樣式
它('Westape page',function(){
    $ this-> get('/') - > assertStatus(200);
});

基本上,只需從路線的功能測試開始,使用工廠,然後依靠Laravel的助手。這並不復雜 - 但在長期應用可靠性方面有很大的不同。

以上是如何在Laravel編寫測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

Rimworld Odyssey如何釣魚
1 個月前 By Jack chen
Kimi K2:最強大的開源代理模型
1 個月前 By Jack chen
我可以有兩個支付帳戶嗎?
1 個月前 By 下次还敢

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1602
29
PHP教程
1506
276
Laravel中的配置緩存是什麼? Laravel中的配置緩存是什麼? Jul 27, 2025 am 03:54 AM

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

如何在Laravel測試中模擬對象? 如何在Laravel測試中模擬對象? Jul 27, 2025 am 03:13 AM

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

如何在Laravel中實施推薦系統? 如何在Laravel中實施推薦系統? Aug 02, 2025 am 06:55 AM

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

如何運行Laravel項目? 如何運行Laravel項目? Jul 28, 2025 am 04:28 AM

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

如何在Laravel中播種數據庫? 如何在Laravel中播種數據庫? Jul 28, 2025 am 04:23 AM

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

如何使用Laravel構建REST API? 如何使用Laravel構建REST API? Jul 30, 2025 am 03:41 AM

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

如何在Laravel應用中實現功能標誌? 如何在Laravel應用中實現功能標誌? Jul 30, 2025 am 01:45 AM

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

如何在Laravel應用程序中實現GraphQl? 如何在Laravel應用程序中實現GraphQl? Jul 27, 2025 am 01:27 AM

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

See all articles