我如何测试Laravel护照API端点

时间:2019-04-25 14:19:32

标签: laravel phpunit laravel-passport

所以我想对API端点进行单元测试。 我正在使用Laravel 5.8,并且通过Passport完成了api身份验证 我有以下测试:

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执行请求时,它可以很好地工作,可以对用户进行身份验证并返回令牌,但是当我启动测试时,它会失败,并显示错误消息(“预期状态码为200,但收到了500。”)

所以我在响应中进行了更深入的搜索,发现了这一点:

  

“消息”:“未找到个人访问客户端。请创建一个。”

不知道为什么会这样,如果有人对此有所了解

编辑:已修复,请参见下面的最后一个答案

5 个答案:

答案 0 :(得分:2)

如果您正在使用刷新数据库特征

public function setUp(){
    parent::setUp();
     \Artisan::call('passport:install');  
  }

答案 1 :(得分:0)

您看到此错误是因为尚未创建任何护照客户端。首先,请确保您已正确安装护照。然后在项目的根目录中运行以下命令以创建access client

php artisan passport:install

答案 2 :(得分:0)

只是为了向遇到相同问题的人说清楚,问题是我使用内存数据库进行测试这一事实,每次运行测试时它都会重置,因此当然也擦除了护照密钥,为什么在测试开始时添加\Artisan::call('passport:install');可以解决此问题。

答案 3 :(得分:0)

\Artisan::call('passport:install');

这解决了问题

答案 4 :(得分:0)

这就是我写我的设置的方式......它曾经可以在没有护照哈希的情况下工作,现在经过哈希处理它不起作用......有人知道为什么吗?那就太酷了……

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'),
    ]);
}