如何在Symfony 2中加载功能测试中的灯具

Ous*_*ane 27 doctrine fixture functional-testing symfony

我的DoctrineFixturesBundle已安装,我可以通过命令行加载夹具但是,如何从功能测试中加载夹具?

小智 21

如果你使用symfony WebTestCase,实际上有一种非常简单的方法来加载你的灯具.你的夹具必须实现FixtureInterface; 因此,您可以load()直接在测试setUp()方法中调用它的方法.您只需要传递EntityManagerload()方法,该方法可以从symfony容器中获取:

public function setUp() {
    $client = static::createClient();
    $container = $client->getContainer();
    $doctrine = $container->get('doctrine');
    $entityManager = $doctrine->getManager();

    $fixture = new YourFixture();
    $fixture->load($entityManager);
}
Run Code Online (Sandbox Code Playgroud)

  • 这会错过所有ReferenceRepository的东西-addRef / getRef (2认同)

Nic*_*ich 18

您可以setUp()此问题中看到,在测试方法中加载灯具.

您可以使用问题中的代码,但需要附加--appenddoctrine:fixtures:load命令以避免fixtures-bundle的确认.

更好的解决方案是查看LiipFunctionalTestBundle,它可以更轻松地使用数据夹具.


小智 7

我只想提供一个稍微简洁的方法,如果你想首先清除你以前的测试数据表,例如,如果你在phpunit中运行你的测试.

use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Loader;
use Namespace\FakeBundle\DataFixtures\ORM\YourFixtures;

public function setUp()
{
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()
        ->get('doctrine')
        ->getManager()
    ;

    $loader = new Loader();
    $loader->addFixture(new YourFixtures);

    $purger = new ORMPurger($this->em);
    $executor = new ORMExecutor($this->em, $purger);
    $executor->execute($loader->getFixtures());

    parent::setUp();
}
Run Code Online (Sandbox Code Playgroud)

这允许加载夹具(您可以将更多内容推入添加夹具方法),并在加载之前清除表格.另请注意,MongoDB使用MongoDBPurger和MongoDBExecutor具有相同的选项.希望它可以帮助某人