app-verk/api-test-cases

使用 Symfony 3 框架提高编写 API PHPUnit 测试用例的测试用例

安装: 938

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 7

分支: 4

开放问题: 0

类型:symfony-bundle

1.0.9 2021-09-12 21:18 UTC

This package is auto-updated.

Last update: 2024-09-25 21:07:08 UTC


README

Build Status

使用 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