【问题标题】:symfony 3.4 phpunit and fixturessymfony 3.4 phpunit 和固定装置
【发布时间】:2019-03-14 02:20:38
【问题描述】:

我想为不同的环境创建一些固定装置,例如 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);
}

例如,如果我想要一个用于开发环境的装置

    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() 并运行教义:fixtures:load --env dev 命令还是有其他方法?

【问题讨论】:

    标签: symfony phpunit fixtures


    【解决方案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;
    

    【讨论】:

    • 我使用了一个补充包 dama/doctrine-test-bundle,这个包使用事务来撤销数据库修改。我已经在我删除的帖子中解释了:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2011-10-01
    相关资源
    最近更新 更多