代码之家  ›  专栏  ›  技术社区  ›  eldiablo62

symfony 3.4 phpunit和固定装置

  •  1
  • eldiablo62  · 技术社区  · 7 年前

    我想为不同的环境创建一些fixture,例如prod加载默认值,dev用于开发人员,test用于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);
    }
    

    例如,如果我想要一个dev environment的fixture

        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时doctrine:fixtures:load—环境开发 没关系

    现在我想用这个设备用phpunit测试我的应用程序。

    我想知道怎么做?使用setUp()并运行doctrine:fixtures:load--env dev命令还是有其他方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sadok Mtir    7 年前

    你能做什么来达到你期望的行为,我认为你可以使用 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;