Symfony 在功能测试中,在每次测试出现身份验证问题之前重置数据库
我正在为我的RESTAPI实现功能测试。Api受授权保护。为此,我选择了json_登录提供程序。到目前为止,一切顺利。身份验证在正常环境下通过网络进行访问时有效 现在我想要功能测试。为此,我通过配置的用户类创建一个用户,并将其保存在数据库中。一切正常。 当然,测试只工作一次,因为用户已经存在于以下测试中 因此,我尝试使用ResetDatabaseTrait或ReloadDatabaseTrait以及Symfony 在功能测试中,在每次测试出现身份验证问题之前重置数据库,symfony,phpunit,api-platform.com,Symfony,Phpunit,Api Platform.com,我正在为我的RESTAPI实现功能测试。Api受授权保护。为此,我选择了json_登录提供程序。到目前为止,一切顺利。身份验证在正常环境下通过网络进行访问时有效 现在我想要功能测试。为此,我通过配置的用户类创建一个用户,并将其保存在数据库中。一切正常。 当然,测试只工作一次,因为用户已经存在于以下测试中 因此,我尝试使用ResetDatabaseTrait或ReloadDatabaseTrait以及dmaicher/doctrine测试包hautelook/alice bundle。 两者都显示
dmaicher/doctrine测试包hautelook/alice bundle
。
两者都显示相同的行为:身份验证器无法找到新创建的用户。(EntityUserProvider::loadUserByUsername
未找到任何用户)
显然,EntityUserProvider似乎在数据库中使用了不同的“连接”,无法查看这些库启动的事务
测试中负责持久化用户的实体管理器是使用
protected function setUp(): void {
$kernel = self::bootKernel();
$this->em = $kernel->getContainer()
->get('doctrine')
->getManager();
}
或者直接在使用创建用户之前
$em = self::$container->get('doctrine')->getManager();
这对我来说似乎是正确的。但在任何情况下,我都会得到相同的结果->“无效凭据”,因为找不到用户
也许有人能给我指出正确的方向?经过一次令人耳目一新的休息后,我想起了创建测试时的一个细节。所有示例都不需要包含self:bootcenere()的安装方法。但是没有它,self::$container
属性是空的,所以我将它添加到我的测试类中。也许有解决问题的办法
我是对的!
我正在使用Api平台
包。因此,我的测试类基于apipplatform\Core\Bridge\Symfony\Bundle\test\ApiTestCase
。该类没有setUp方法,但是检查createClient()
时,我注意到内核是通过调用bootKernel()
创建的,这也会停止任何正在运行的内核
因此,我的setUp()方法创建了一个内核。我用这个内核创建了我的用户。
然后我调用createClient()
为请求创建测试客户端。这杀死了我最初的内核,并创建了一个新的内核,然后导致了问题
重新排列语句-首先创建客户端,然后从现在创建的容器中获取EntityManager,并在创建客户端后创建用户以解决问题。在Api平台存储库中为此打开了一个问题: