测试

幸运的是,测试API实际上比在laravel中测试任何东西都简单。

我们将在第12章中更深入地介绍这一点,但是有一系列方法可以对JSON进行断言。 将该功能与全栈应用程序测试的简单性相结合,您可以快速轻松地组合API测试。 看一下例13-44中的常见API测试模式。

Example 13-44. A common API testing pattern
class DogsApiTest extends TestCase
{
use WithoutMiddleware, RefreshDatabase;
public function test_it_gets_all_dogs() {
$dog1 = factory(Dog::class)->create();
$dog2 = factory(Dog::class)->create();
$response = $this->getJson('api/dogs');
$response->assertJsonFragment(['name' => $dog1->name]);
$response->assertJsonFragment(['name' => $dog2->name]);
}
}

请注意,我们使用WithoutMiddleware以避免担心身份验证。 如果需要的话,您将需要单独测试(有关身份验证的更多信息,请参阅第9章)

在这个测试中,我们将两个dog插入数据库,然后访问api路径以列出所有dog,并确保输出中都存在这两个dog。

在这里,您可以简单方便地覆盖所有api路由,包括修改post和patch等操作。

测试Passport

你也可以在Passport facacde上使用actingAs()来测试你的作用域,请看示例13-45,以查看Passport中测试作用域的通用模式。

Example 13-45. Testing scoped access
public function test_it_lists_all_clips_for_those_with_list_clips_scope() {
Passport::actingAs(
factory(User::class)->create(),
['list-clips']
);
$response = $this->getJson('api/clips');
$response->assertStatus(200);
}