在使用 laravel 框架編寫(xiě)接口后,在驗(yàn)收這個(gè)項(xiàng)目的時(shí)候,我們需要一些測(cè)試技巧來(lái)測(cè)試接口的代碼的正確性。下面,我們將介紹如何對(duì) laravel 接口進(jìn)行測(cè)試。
測(cè)試工具
在 Laravel 中,我們可以使用 PHPUnit 來(lái)進(jìn)行接口測(cè)試。PHPUnit 是一個(gè)功能強(qiáng)大的 PHP 單元測(cè)試工具,它支持自動(dòng)化測(cè)試、API 測(cè)試甚至是端到端測(cè)試。在 Laravel 5.5 及更高版本中,PHPUnit 已成為框架自帶的測(cè)試工具,因此不需要進(jìn)行額外安裝。
編寫(xiě)測(cè)試用例
在 Laravel 中,我們可以使用 php artisan make:test 命令來(lái)生成測(cè)試用例文件。這個(gè)命令將在 tests/Feature 目錄中生成一個(gè)測(cè)試類,并將這個(gè)類繼承自 PHPUnitFrameworkTestCase 類。測(cè)試類的每一個(gè)方法都將被自動(dòng)作為一個(gè)測(cè)試用例運(yùn)行。例如:
<?php namespace TestsFeature; use TestsTestCase; use IlluminateFoundationTestingRefreshDatabase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $response = $this->get('/'); $response->assertStatus(200); } }
在這個(gè)示例代碼中,我們創(chuàng)建了一個(gè) testBasicTest 的方法,并且使用了 $this->get() 方法來(lái)發(fā)送 HTTP GET 請(qǐng)求,然后使用 $response->assertStatus() 方法來(lái)判斷響應(yīng)狀態(tài)碼是否為 200。
發(fā)送請(qǐng)求
在 Laravel 中,我們可以使用 $this->get()、$this->post()、$this->put()、$this->patch() 和 $this->delete() 等方法來(lái)發(fā)送 HTTP 請(qǐng)求。這些方法將自動(dòng)執(zhí)行路由和控制器方法,并返回 HTTP 響應(yīng)對(duì)象。例如,發(fā)送一個(gè) GET 請(qǐng)求到 /users 路由,在測(cè)試類中可以這樣寫(xiě):
public function testGetUsers() { $response = $this->get('/users'); $response->assertStatus(200); }
判斷響應(yīng)內(nèi)容
在 Laravel 中,我們可以使用 $response->assertJson()、$response->assertStatus()、$response->assertSeeText() 和 $response->assertDontSeeText() 等方法來(lái)對(duì)響應(yīng)內(nèi)容進(jìn)行斷言。
如果我們要判斷響應(yīng)內(nèi)容是否包含一段 JSON 字符串,可以使用 $response->assertJson() 方法,如果我們要判斷響應(yīng)狀態(tài)碼是否為 200,可以使用 $response->assertStatus(200) 方法。如果我們要判斷響應(yīng)內(nèi)容是否包含某個(gè)文本,可以使用 $response->assertSeeText(‘Hello World’) 方法。如果我們要判斷響應(yīng)內(nèi)容是否不包含某個(gè)文本,可以使用 $response->assertDontSeeText(‘Hello World’) 方法。
例如,測(cè)試 /users 路由返回的用戶列表應(yīng)該是一個(gè)數(shù)組,我們可以這樣寫(xiě):
public function testGetUsers() { $response = $this->get('/users'); $response->assertJson([ 'users' => [], ]); }
模擬認(rèn)證和授權(quán)
在 Laravel 中,我們可以使用 Laravel 自帶的 Auth:: Facade 來(lái)模擬認(rèn)證和授權(quán)。例如,我們可以使用 Auth::login() 方法來(lái)模擬登陸一個(gè)用戶,也可以使用 Auth::shouldReceive() 方法來(lái)模擬驗(yàn)證一個(gè)用戶是否有某個(gè)權(quán)限等。
例如,我們要測(cè)試是否需要認(rèn)證訪問(wèn) /dashboard 路由,我們可以這樣寫(xiě):
public function testDashboardRequiresAuthentication() { $response = $this->get('/dashboard'); $response->assertRedirect('/login'); }
總結(jié)
在 Laravel 中,我們可以使用 PHPUnit 來(lái)進(jìn)行接口測(cè)試,使用 $this->get()、$this->post()、$this->put()、$this->patch() 和 $this->delete() 等方法來(lái)發(fā)送 HTTP 請(qǐng)求,使用 $response->assertJson()、$response->assertStatus()、$response->assertSeeText() 和 $response->assertDontSeeText() 等方法來(lái)對(duì)響應(yīng)內(nèi)容進(jìn)行斷言。也可以使用 Laravel 自帶的 Auth:: Facade 來(lái)模擬認(rèn)證和授權(quán)。