29

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

4

4 に答える 4

25

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

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

    $fixture = new YourFixture();
    $fixture->load($entityManager);
}
于 2013-12-05T12:55:38.903 に答える
18

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

質問のコードを使用できますが、フィクスチャ バンドルによる確認を避けるために--append、コマンドに追加する必要があります。doctrine:fixtures:load

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

于 2013-06-13T16:05:17.380 に答える
13

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 を使用する同じオプションがあることに注意してください。それが誰かを助けることを願っています

于 2014-02-17T14:59:00.580 に答える
2

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

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

詳細については、短いブログ投稿を書きました。

于 2014-04-07T21:18:25.070 に答える