我的DoctrineFixturesBundle已经安装好了,我可以通过命令行加载fixture,但是,如何从功能测试加载fixture呢?
发布于 2013-06-14 00:05:17
您可以像在this question中看到的那样,在测试的setUp()
方法中加载fixture。
您可以使用问题中的代码,但需要将--append
附加到doctrine:fixtures:load
命令,以避免由fixtures-bundle进行确认。
更好的解决方案是看一看LiipFunctionalTestBundle,它使数据固定的使用变得更容易。
发布于 2013-12-05 20:55:39
如果你使用symfony的WebTestCase
,实际上有一种非常简单的方法来加载你的fixture。您的fixture必须实现FixtureInterface
;因此,您可以在测试的setUp()
方法中直接调用它的load()
方法。您只需将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);
}
发布于 2014-02-17 22:59:01
我只是想提供一个稍微整洁的方法,如果你想首先清除你的表中以前的测试数据,例如,如果你在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();
}
这允许装入fixture (您可以将更多的装入到add fixture方法中),并在装入表之前清除它们。还请注意,使用MongoDBPurger和MongoDBExecutor时,MongoDB具有相同的选项。希望这能帮助到某个人
https://stackoverflow.com/questions/17091772
复制相似问题