phphd/api-test-bundle

此包已被废弃且不再维护。作者建议使用phphd/api-testing包。

JWT身份验证用于API测试

1.1.0 2024-09-16 10:57 UTC

This package is auto-updated.

Last update: 2024-09-16 11:25:15 UTC


README

🧰 此包为Symfony应用程序中的API测试提供轻量级的jwt授权工具。本质上,此包将Lexik JWT Authentication Bundle集成到您的Api测试用例中。

Build Status Codecov Psalm coverage Psalm level Total Downloads Licence

快速入门

安装 📥

  1. 通过Composer安装

    composer require --dev phphd/api-testing
  2. bundles.php中启用该包

    PhPhD\ApiTesting\Bundle\PhdApiTestingBundle::class => ['test' => true],

配置 ⚒️

config/packages/test目录下创建phd_api_testing.yaml配置文件。在这里指定应用用户提供者的服务ID。如果您只有一个认证用户实体(因此只有一个提供者),则使用当前默认配置。

phd_api_testing:
    jwt_authenticators:
        -   name: default
            user_provider: security.user_providers

使用 🚀

在您的API测试类中使用JwtLoginTraitlogin方法来处理身份验证

use PhPhD\ApiTesting\Jwt\JwtLoginTrait;

final class ExampleProtectedApiTest extends ApiTestCase
{
    use JwtLoginTrait;
    
    // ...

    public function testAccessFeatureWithoutPassword(): void
    {
        $token = $this->login('username');

        $this->client->request('GET', '/api/protected-route', [
            'auth_bearer' => $token,
        ]);

        self::assertResponseStatusCodeSame(200);
    }
}

在此示例中,使用loginusername用户生成jwt令牌,以便以他的名义发送API请求。

高级配置 ⚙️

多个认证器

可以根据特定需求使用多个认证器。例如,如果您除了主认证应用外还有管理员面板,您可能希望使用专门的认证器。

本质上,如果您正在使用security.user_providers,通常不需要额外的配置,因为security.user_providers充当链式用户提供者,这意味着将使用从任何从属提供者找到的第一个用户。

不过,在用户名冲突或其他特定原因的情况下,您可以在同一配置文件中以不同的名称注册额外的认证器。

phd_api_testing:
    jwt_authenticators:
        -   name: admin
            user_provider: security.user.provider.concrete.api_admin_user_provider

在此配置中,api_admin_user_provider是来自security.yaml的用户提供者名称,而admin - 只是我们在测试中使用的别名。

注册认证器后,我们可以将其别名用作login方法的第二个参数。

public function testDedicatedAdminAuthenticator(): void
{
    $token = $this->login('admin@test.com', authenticator: 'admin');

    $this->client->request('GET', '/api/admin/protected-route', [
        'auth_bearer' => $token,
    ]);

    self::assertResponseStatusCodeSame(200);
}