我如何测试 Laravel passport API 端点
How do i test Laravel passport API endpoints
所以我想对我的 API 端点进行单元测试。
我正在使用 Laravel 5.8 并且 api 身份验证是通过 Passport 完成的
我有以下测试:
public function guest_can_login()
{
$user = factory(User::class)->create();
$response = $this->json('POST', 'api/login', [
'email' => $user->email,
'password' => 'secret',
]);
$response
->assertStatus(200)
->assertJson([
'success' => true,
]);
}
当我使用 Postman 执行请求时它运行良好,验证用户和 return 令牌但是当我启动测试时它失败并显示 ("Expected status code 200 but received 500.")
所以我在回复中进行了更深入的搜索,我发现了这个:
"message": "Personal access client not found. Please create one."
不知道为什么会这样,如果有人对此有所了解的话
编辑:已修复,请参阅下面的最后一个答案
您看到此错误是因为您尚未创建任何护照客户端。首先,请确保您已正确安装护照。然后运行下面的命令在你的项目根目录下创建access client
;
php artisan passport:install
只是为了让有同样问题的人清楚,问题是我正在使用内存数据库进行测试,每次你 运行 测试时它都会重置,所以当然是护照密钥也被擦除,这就是为什么在测试开始时添加 \Artisan::call('passport:install');
可以解决此问题。
如果您正在使用刷新数据库特征
public function setUp(){
parent::setUp();
\Artisan::call('passport:install');
}
未找到 运行 测试时的护照设置,这就是 运行 测试时出现错误 500 的原因。命令 artisan passport install 将测试环境的通行证设置为 运行 测试,这就是它在下面的命令行中运行良好的原因;
\Artisan::call('passport:install');
这就是我编写设置的方式...它过去在没有护照散列的情况下工作,现在散列后它不起作用...有人知道为什么吗?太好了谢谢...
public function setUp(): void
{
parent::setUp();
Route::get('/test-route', function (Request $request) {
return $request->user();
})->middleware('auth:api');
$clientRepository = new ClientRepository();
$personal_access_client = $clientRepository->createPersonalAccessClient(
null,
'Personal Access Client Test',
'/'
);
DB::table('oauth_personal_access_clients')->insert([
'client_id' => $personal_access_client->id,
'created_at' => date('Y-m-d'),
'updated_at' => date('Y-m-d'),
]);
}
所以我想对我的 API 端点进行单元测试。 我正在使用 Laravel 5.8 并且 api 身份验证是通过 Passport 完成的 我有以下测试:
public function guest_can_login()
{
$user = factory(User::class)->create();
$response = $this->json('POST', 'api/login', [
'email' => $user->email,
'password' => 'secret',
]);
$response
->assertStatus(200)
->assertJson([
'success' => true,
]);
}
当我使用 Postman 执行请求时它运行良好,验证用户和 return 令牌但是当我启动测试时它失败并显示 ("Expected status code 200 but received 500.")
所以我在回复中进行了更深入的搜索,我发现了这个:
"message": "Personal access client not found. Please create one."
不知道为什么会这样,如果有人对此有所了解的话
编辑:已修复,请参阅下面的最后一个答案
您看到此错误是因为您尚未创建任何护照客户端。首先,请确保您已正确安装护照。然后运行下面的命令在你的项目根目录下创建access client
;
php artisan passport:install
只是为了让有同样问题的人清楚,问题是我正在使用内存数据库进行测试,每次你 运行 测试时它都会重置,所以当然是护照密钥也被擦除,这就是为什么在测试开始时添加 \Artisan::call('passport:install');
可以解决此问题。
如果您正在使用刷新数据库特征
public function setUp(){
parent::setUp();
\Artisan::call('passport:install');
}
未找到 运行 测试时的护照设置,这就是 运行 测试时出现错误 500 的原因。命令 artisan passport install 将测试环境的通行证设置为 运行 测试,这就是它在下面的命令行中运行良好的原因;
\Artisan::call('passport:install');
这就是我编写设置的方式...它过去在没有护照散列的情况下工作,现在散列后它不起作用...有人知道为什么吗?太好了谢谢...
public function setUp(): void
{
parent::setUp();
Route::get('/test-route', function (Request $request) {
return $request->user();
})->middleware('auth:api');
$clientRepository = new ClientRepository();
$personal_access_client = $clientRepository->createPersonalAccessClient(
null,
'Personal Access Client Test',
'/'
);
DB::table('oauth_personal_access_clients')->insert([
'client_id' => $personal_access_client->id,
'created_at' => date('Y-m-d'),
'updated_at' => date('Y-m-d'),
]);
}