DoctrineFixturesBundle がインストールされ、コマンドラインからフィクスチャをロードできますが、機能テストからフィクスチャをロードするにはどうすればよいですか?
4 に答える
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);
}
この質問setUp()
でわかるように、テストのメソッドにフィクスチャをロードできます。
質問のコードを使用できますが、フィクスチャ バンドルによる確認を避けるために--append
、コマンドに追加する必要があります。doctrine:fixtures:load
より良い解決策は、データ フィクスチャの使用を容易にするLiipFunctionalTestBundleを確認することです。
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 を使用する同じオプションがあることに注意してください。それが誰かを助けることを願っています
すでに述べたように、LiipFunctionalTestBundleを使用することをお勧めします。WebTestCase
次に、から拡張しますLiip\FunctionalTestBundle\Test\WebTestCase
。$this->loadFixtures()
これにより、引数としてフィクスチャの配列を取る呼び出しが可能になります。
$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);
詳細については、短いブログ投稿を書きました。