我想为不同的环境创建一些固定装置,例如prod加载默认值,为开发人员开发dev并使用phpunit进行测试。
我已经创建了一个抽象类
abstract class AbstractFixture extends Fixture implements ContainerAwareInterface
{
protected $container;
public function setContainer(ContainerInterface $container = null): void
{
$this->container = $container;
}
public function load(ObjectManager $manager): void
{
$kernel = $this->container->get('kernel');
if (\in_array($kernel->getEnvironment(), $this->getEnvironments(), true)) {
$this->doLoad($manager);
}
}
abstract protected function getEnvironments();
abstract protected function doLoad(ObjectManager $manager);
}
例如,如果我想要开发环境的固定设备
class DevFixture extends AbstractFixture implements DependentFixtureInterface
{
public function getDependencies(): array
{
return [
AppFixture::class,
DevFixture::class,
];
}
protected function getEnvironments(): array
{
return ['dev'];
}
protected function doLoad(ObjectManager $objectManager): void
{
}
}
当我运行bin / console指令时:fixtures:load --env dev 没关系
现在,我想使用此灯具来用phpunit测试我的应用程序。 我想为每个测试加载夹具。
我想知道该怎么做?使用setUp()并运行doctrine:fixtures:load --env dev命令还是有其他方法?
答案 0 :(得分:1)
您可以采取什么措施来实现预期的行为,我认为您可以使用bootstrap.php
,它会在所有测试之前运行一次。
我想说的例子:
<?php declare(strict_types=1);
require __DIR__.'/../vendor/autoload.php';
echo 'Recreating and Seeding Database';
passthru('php "'.__DIR__.'/../bin/console" doctrine:database:drop --force --env=test');
passthru('php "'.__DIR__.'/../bin/console" doctrine:database:create --env=test');
passthru('php "'.__DIR__.'/../bin/console" doctrine:schema:create --env=test');
passthru('php "'.__DIR__.'/../../bin/console" doctrine:fixtures:load --env=test');
echo ' Done'.PHP_EOL;