PHPUnit测试未与Symfony共享实体管理器

0dxa2lsx  于 2022-11-21  发布在  PHP
关注(0)|答案(1)|浏览(127)

我正在运行Symfony 5.4和PHPUnit 9.5。我有一个扩展Symfony\Bundle\FrameworkBundle\Test\WebTestCase的测试。我在测试中创建了一个实体,然后执行测试中的代码。但是,在我的应用程序代码中,找不到该实体。我尝试直接在调用的应用程序代码中找到该实体,并使用dd()将其转储出来(提前结束测试),但我总是得到null。不知何故,我的测试使用了与应用程序代码不同的实体管理器。这就是我获取实体管理器的方式:

<?php
use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class MyTest extends WebTestCase {
  protected EntityManager $entity_manager;

  protected function setUp(): void {
    $this->entity_manager = static::getContainer()->get('doctrine')->getManager();
  }

  public function testShouldCreateAnEntityThatIsVisibleInTheAppCode() {
    $user = new User();
    $user->setFirstName('Joe');
    $user->setLastName('Bloggs');
    $user->setEmail('joe.bloggs@example.com');
    $this->entity_manager->persist($user);
    $this->entity_manager->flush();

    $crawler = static::$client->request('GET', 'https://localhost/admin/show-users');
    $this->assertStringContainsString('joe.bloggs@example.com', $crawler->html());
  }
}

如何让我的测试使用与被测代码相同的实体管理器?

cngwdvgl

cngwdvgl1#

结果我只需要加上

static::$client->disableReboot();

转换为setUp(),如下所示:

protected function setUp(): void {
    static::$client->disableReboot();
    $this->entity_manager = static::getContainer()->get('doctrine')->getManager();
  }

相关问题