如何生成用于测试数据库的 Passport oauth_clients?

How to generate Passport oauth_clients for testing database?

我正在测试 api 使用 laravel 护照进行身份验证的端点。我正在编写一个功能测试来检查 oauth/token 是否可以 return 一个有效的 access_token。它在邮递员中工作正常,但我使用不同的数据库进行测试,所以当我 运行 测试时,我总是遇到 400 错误。虽然我能够测试所有经过身份验证的路由,但是当我想测试 api/loginoauth/token 端点时我被卡住了。我正在 运行ning artisan 命令为测试数据库安装通行证。如何获取客户端id和密码?

在测试用例中class

public function setUp(): void
    {
        parent::setUp();

        Artisan::call('migrate', ['-vvv' => true]);
        Artisan::call('passport:install', ['-vvv' => true]);
        Artisan::call('db:seed', ['-vvv' => true]);
    }

登录测试class

public function test_it_returns_a_valid_token_if_credentials_do_match()
    {
        $client = Passport::client();

        $user = User::factory()->create([
            'email' => $email = 'test@test.com',
            'password' => $password = '12345678'
        ]);

        $body = [
            'client_id' => $client->id,
            'client_secret' => $client->secret,
            'username' => $email,
            'password' => $password
        ];

        $this->json('POST', '/oauth/token', $body)
            ->assertStatus(200);
    }

此处$client = Passport::client()return空。我没有找到任何解决方案来获取 oauth 客户端凭据。

实际上 $client = Passport::client(); 没有 return 客户。 我找到了从 LoginTest 创建客户端的解决方案。

$user = User::factory()->create([
            'email' => $email = 'test@test.com',
            'password' => $password = '12345678'
        ]);

$client = ClientFactory::new()->asPasswordClient()->create(['user_id' => $user->id]);

        $response = $this->json(
            'POST', '/oauth/token',
            [
                'grant_type' => 'password',
                'client_id' => $client->id,
                'client_secret' => $client->secret,
                'username' => $user->email,
                'password' => $password,
            ]
        )
        ->assertStatus(200);