在使用 laravel 框架编写接口后,在验收这个项目的时候,我们需要一些测试技巧来测试接口的代码的正确性。下面,我们将介绍如何对 laravel 接口进行测试。
测试工具
在 Laravel 中,我们可以使用 PHPUnit 来进行接口测试。PHPUnit 是一个功能强大的 PHP 单元测试工具,它支持自动化测试、API 测试甚至是端到端测试。在 Laravel 5.5 及更高版本中,PHPUnit 已成为框架自带的测试工具,因此不需要进行额外安装。
编写测试用例
在 Laravel 中,我们可以使用 php artisan make:test 命令来生成测试用例文件。这个命令将在 tests/Feature 目录中生成一个测试类,并将这个类继承自 PHPUnitFrameworkTestCase 类。测试类的每一个方法都将被自动作为一个测试用例运行。例如:
<?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); } }
在这个示例代码中,我们创建了一个 testBasicTest 的方法,并且使用了 $this->get() 方法来发送 HTTP GET 请求,然后使用 $response->assertStatus() 方法来判断响应状态码是否为 200。
发送请求
在 Laravel 中,我们可以使用 $this->get()、$this->post()、$this->put()、$this->patch() 和 $this->delete() 等方法来发送 HTTP 请求。这些方法将自动执行路由和控制器方法,并返回 HTTP 响应对象。例如,发送一个 GET 请求到 /users 路由,在测试类中可以这样写:
public function testGetUsers() { $response = $this->get('/users'); $response->assertStatus(200); }
判断响应内容
在 Laravel 中,我们可以使用 $response->assertJson()、$response->assertStatus()、$response->assertSeeText() 和 $response->assertDontSeeText() 等方法来对响应内容进行断言。
如果我们要判断响应内容是否包含一段 JSON 字符串,可以使用 $response->assertJson() 方法,如果我们要判断响应状态码是否为 200,可以使用 $response->assertStatus(200) 方法。如果我们要判断响应内容是否包含某个文本,可以使用 $response->assertSeeText(‘Hello World’) 方法。如果我们要判断响应内容是否不包含某个文本,可以使用 $response->assertDontSeeText(‘Hello World’) 方法。
例如,测试 /users 路由返回的用户列表应该是一个数组,我们可以这样写:
public function testGetUsers() { $response = $this->get('/users'); $response->assertJson([ 'users' => [], ]); }
模拟认证和授权
在 Laravel 中,我们可以使用 Laravel 自带的 Auth:: Facade 来模拟认证和授权。例如,我们可以使用 Auth::login() 方法来模拟登陆一个用户,也可以使用 Auth::shouldReceive() 方法来模拟验证一个用户是否有某个权限等。
例如,我们要测试是否需要认证访问 /dashboard 路由,我们可以这样写:
public function testDashboardRequiresAuthentication() { $response = $this->get('/dashboard'); $response->assertRedirect('/login'); }
总结
在 Laravel 中,我们可以使用 PHPUnit 来进行接口测试,使用 $this->get()、$this->post()、$this->put()、$this->patch() 和 $this->delete() 等方法来发送 HTTP 请求,使用 $response->assertJson()、$response->assertStatus()、$response->assertSeeText() 和 $response->assertDontSeeText() 等方法来对响应内容进行断言。也可以使用 Laravel 自带的 Auth:: Facade 来模拟认证和授权。