在功能测试中加载服务(Symfony4)
Load service in functional test (Symfony4)
我正在尝试使用 PHPUnit 测试使用 Symfony 4 制作的控制器。
我正在使用 https://github.com/lexik/LexikJWTAuthenticationBundle 来管理 JWT。
如果提供了有效的 JWT,此控制器应 return 200,否则应为 401/403。
401 响应的第一部分很简单:我只是不发送任何令牌
<?php
namespace App\Tests\Controller;
Class GraphQLControllerTest extends \Symfony\Bundle\FrameworkBundle\Test\WebTestCase {
function test_token(){
$client = static::createClient();
$client->request('GET', '/graphql');
// Check 401 response
$response = $client->getResponse();
$this->assertSame(401, $response->getStatusCode());
$this->assertSame('"Not authenticated"', $response->getContent());
}
}
下一部分很棘手:如何在我的 test_token
方法中获取我的 JWT 编码器服务,以便生成一些令牌来测试 200 和 403 响应?
如果我在控制器中,我可以使用 Symfony 自动装配或制作一个 lexik_jwt_authentication.encoder
的 public 别名,像这样使用:
$this->container->get('lexik_jwt_authentication.encoder')
像下面这样在我的测试中手动加载服务似乎效率低下,因为构造函数的一些参数是一些对象,而它们自己的构造函数的一些参数是对象,并且...
new Lexik\Bundle\JWTAuthenticationBundle\Encoder\DefaultEncoder([some objects here])
这就是自动装配的好处:您只需准备好您想要的服务即可使用。
=> 在我的测试中获得此服务的最佳方式是什么?
谢谢!
Symfony 4.1 现在可以使用 KernelTestCase
在测试中加载私人服务
我正在尝试使用 PHPUnit 测试使用 Symfony 4 制作的控制器。 我正在使用 https://github.com/lexik/LexikJWTAuthenticationBundle 来管理 JWT。
如果提供了有效的 JWT,此控制器应 return 200,否则应为 401/403。
401 响应的第一部分很简单:我只是不发送任何令牌
<?php
namespace App\Tests\Controller;
Class GraphQLControllerTest extends \Symfony\Bundle\FrameworkBundle\Test\WebTestCase {
function test_token(){
$client = static::createClient();
$client->request('GET', '/graphql');
// Check 401 response
$response = $client->getResponse();
$this->assertSame(401, $response->getStatusCode());
$this->assertSame('"Not authenticated"', $response->getContent());
}
}
下一部分很棘手:如何在我的 test_token
方法中获取我的 JWT 编码器服务,以便生成一些令牌来测试 200 和 403 响应?
如果我在控制器中,我可以使用 Symfony 自动装配或制作一个 lexik_jwt_authentication.encoder
的 public 别名,像这样使用:
$this->container->get('lexik_jwt_authentication.encoder')
像下面这样在我的测试中手动加载服务似乎效率低下,因为构造函数的一些参数是一些对象,而它们自己的构造函数的一些参数是对象,并且...
new Lexik\Bundle\JWTAuthenticationBundle\Encoder\DefaultEncoder([some objects here])
这就是自动装配的好处:您只需准备好您想要的服务即可使用。
=> 在我的测试中获得此服务的最佳方式是什么?
谢谢!
Symfony 4.1 现在可以使用 KernelTestCase