phphd / api-test-bundle
1.1.0
2024-09-16 10:57 UTC
Requires
- php: >=8.1
- lexik/jwt-authentication-bundle: ^2.0 || ^3.0
Requires (Dev)
- phphd/coding-standard: ~0.5.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.4
- psalm/plugin-phpunit: ^0.18.4
- symfony/var-dumper: ^6.0
- tomasvotruba/type-coverage: ^0.2.1
- vimeo/psalm: ^5.16
Conflicts
- symfony/config: <6.0 || >=8.0
- symfony/dependency-injection: <6.1 || >=8.0
- symfony/http-kernel: <6.0 || >=8.0
- symfony/security-core: <6.0 || >=8.0
This package is auto-updated.
Last update: 2024-09-16 11:25:15 UTC
README
🧰 此包为Symfony应用程序中的API测试提供轻量级的jwt授权工具。本质上,此包将Lexik JWT Authentication Bundle集成到您的Api测试用例中。
快速入门
安装 📥
-
通过Composer安装
composer require --dev phphd/api-testing
-
在
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测试类中使用JwtLoginTrait
和login
方法来处理身份验证
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); } }
在此示例中,使用login
为username
用户生成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); }