我的DoctrineFixturesBundle已安装,我可以通过命令行加载夹具但是,如何从功能测试中加载夹具?
答案 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。