web-dev-qa-db-ja.com

Symfony 2の機能テストからフィクスチャーをロードするにはどうすればよいですか

DoctrineFixturesBundleがインストールされていて、コマンドラインからフィクスチャをロードできますが、機能テストからフィクスチャをロードするにはどうすればよいですか?

27
Ousmane

この質問 で確認できるように、テストのsetUp()メソッドでフィクスチャをロードできます。

質問のコードを使用できますが、fixtures-bundleによる確認を回避するために、--appendコマンドにdoctrine:fixtures:loadを追加する必要があります。

より良い解決策は、データフィクスチャの使用を容易にする LiipFunctionalTestBundle を確認することです。

18

SymfonyのWebTestCaseを使用する場合、実際にはフィクスチャをロードする非常に簡単な方法があります。フィクスチャはFixtureInterfaceを実装する必要があります。したがって、テストのload()メソッドでsetUp()メソッドを直接呼び出すことができます。 EntityManagerload()メソッドに渡すだけで、symfonyコンテナーから取得できます:

public function setUp() {
    $client = static::createClient();
    $container = $client->getContainer();
    $doctrine = $container->get('doctrine');
    $entityManager = $doctrine->getManager();

    $fixture = new YourFixture();
    $fixture->load($entityManager);
}
20
firstprophet

最初に以前のテストデータのテーブルを削除する場合は、少しすっきりとしたアプローチを提供したかっただけです。テストを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を使用する同じオプションがあることに注意してください。それが誰かを助けることを願って

7
Peter

すでに述べたように、LiipFunctionalTestBundleを使用することをお勧めします。次に、_Liip\FunctionalTestBundle\Test\WebTestCase_からWebTestCaseを拡張します。これにより、フィクスチャの配列を引数として取る$this->loadFixtures()を呼び出すことができます。

_$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);
_

詳細については、短い blogpost を作成しました。

2
Marc Juchli