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

时间:2013-06-13 16:02:37

标签: symfony doctrine functional-testing fixture

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

4 个答案:

答案 0 :(得分:19)

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

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

    $fixture = new YourFixture();
    $fixture->load($entityManager);
}

答案 1 :(得分:18)

您可以在this question中看到,在测试的setUp()方法中加载灯具。

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

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

答案 2 :(得分:6)

如果您想首先清除以前的测试数据表,我想提供一种稍微简洁的方法,例如:如果您在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();
}

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

答案 3 :(得分:2)

如前所述,建议使用 LiipFunctionalTestBundle 。 然后,您希望从WebTestCase扩展Liip\FunctionalTestBundle\Test\WebTestCase。这将允许调用$this->loadFixtures(),它将一系列灯具作为参数。

$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);

有关详细信息,我写了一篇简短的blogpost