soft-passio/api-test-cases

针对使用 Symfony 3 框架增强编写 PHPUnit API 测试用例的测试用例

安装量: 1,062

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 4

类型:symfony-bundle

2.1.6 2020-06-13 18:08 UTC

This package is auto-updated.

Last update: 2024-09-14 03:15:46 UTC


README

用于增强使用 Symfony 框架编写 PHPUnit 功能性 API 测试用例的测试用例。该包可以帮助您调试失败的测试并增强测试驱动开发(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 SoftPassio\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