app-verk / api-test-cases
使用 Symfony 3 框架提高编写 API PHPUnit 测试用例的测试用例
1.0.9
2021-09-12 21:18 UTC
Requires
- php: ^7.2
- app-verk/alice-bundle: *
- coduo/php-matcher: 3.1.*
- guzzlehttp/guzzle: ^5.0 || ^6.0 || ^7.0
- phpspec/php-diff: ^1.1
- phpunit/phpunit: ^6.2 || ^8.3
- polishsymfonycommunity/symfony-mocker-container: ^1.0
- sensio/framework-extra-bundle: ^5.3
- symfony/orm-pack: *
- symfony/phpunit-bridge: ^4.2
README
使用 Symfony 框架提高编写 API PHPUnit 功能测试用例的测试用例。此包可以帮助您调试失败的测试并提高 TDD 流程。
失败的响应示例
Failure! when making the following request:
POST: http://foo.app/app_test.php/api/security/token
HTTP/1.1 404 Not Found
Date: Sat, 08 Jul 2017 12:28:19 GMT
Server: Apache
X-Powered-By: PHP/7.0.15
Cache-Control: no-cache, private
Content-Length: 84
Content-Type: application/problem+json
{
"detail": "Client is blocked",
"status": 404,
"type": "about:blank",
"title": "Not Found"
}
"Client is blocked" does not match "Client is blockedx".
@@ -1,5 +1,5 @@
{
- "detail": "Client is blockedx",
+ "detail": "Client is blocked",
"status": 404,
"type": "about:blank",
"title": "Not Found"
用法
您需要做的只是扩展您的功能控制器类中的 JsonApiTestCase。
use AppVerk\ApiTestCasesBundle\Api\Cases\JsonApiTestCase;
use Symfony\Component\HttpFoundation\Response;
class ProfileControllerTest extends JsonApiTestCase
{
...
}
测试 API 方法
测试代码
public function testMeActionSuccess()
{
$this->authenticateFixtureUser('profile/user.yml');
$response = $this->client->get('/api/profile/me');
$this->assertResponse($response, 'profile/me/success', Response::HTTP_OK);
}
Alice 架构文件
AppBundle\Entity\User:
user1:
username: test
email: test@test.foo
password: test
使用 lexik/LexikJWTAuthenticationBundle 的 JWT 身份验证方法
protected function authenticateFixtureUser(
string $userFixturePath,
$expired = JwtTokenFactory::EXPIRATION_TIME
) {
$this->loadFixturesFromFile($userFixturePath);
$tokenData = [
'username' => 'test',
'exp' => time() + $expired,
];
$token = $this->getService('lexik_jwt_authentication.encoder')->encode($tokenData);
self::$staticClient->setDefaultOption('headers/Authorization', 'Bearer '.$token);
return $tokenData;
}
配置文件 - config_test.ynl
security:
encoders:
AppBundle\Entity\User: plaintext
更多示例
更多示例请访问 https://github.com/AppVerk/BaseApi/tree/master/src/Bundle/ApiBundle/Tests