symfony 3.4 phpunit 和固定装置
symfony 3.4 phpunit and fixtures
我想为不同的环境创建一些固定装置,例如用于加载默认值的 prod,用于开发人员的 dev 和用于使用 phpunit 进行测试的 test。
我已经创建了一个摘要class
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/consoledoctrine:fixtures:load--env dev
没关系
现在我想使用这个夹具通过 phpunit 测试我的应用程序。
我希望每次测试都加载夹具。
我想知道如何做到这一点?使用 setUp() 和 运行 宁 doctrine:fixtures:load --env dev 命令或有其他方式 ?
您可以做什么来实现您期望的行为,我认为您可以在所有测试之前使用 运行 一次 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;
我想为不同的环境创建一些固定装置,例如用于加载默认值的 prod,用于开发人员的 dev 和用于使用 phpunit 进行测试的 test。
我已经创建了一个摘要class
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/consoledoctrine:fixtures:load--env dev 没关系
现在我想使用这个夹具通过 phpunit 测试我的应用程序。 我希望每次测试都加载夹具。
我想知道如何做到这一点?使用 setUp() 和 运行 宁 doctrine:fixtures:load --env dev 命令或有其他方式 ?
您可以做什么来实现您期望的行为,我认为您可以在所有测试之前使用 运行 一次 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;