DoctrineFixturesBundleがインストールされていて、コマンドラインからフィクスチャをロードできますが、機能テストからフィクスチャをロードするにはどうすればよいですか?
この質問 で確認できるように、テストのsetUp()
メソッドでフィクスチャをロードできます。
質問のコードを使用できますが、fixtures-bundleによる確認を回避するために、--append
コマンドにdoctrine:fixtures:load
を追加する必要があります。
より良い解決策は、データフィクスチャの使用を容易にする LiipFunctionalTestBundle を確認することです。
SymfonyのWebTestCase
を使用する場合、実際にはフィクスチャをロードする非常に簡単な方法があります。フィクスチャはFixtureInterface
を実装する必要があります。したがって、テストのload()
メソッドでsetUp()
メソッドを直接呼び出すことができます。 EntityManager
をload()
メソッドに渡すだけで、symfonyコンテナーから取得できます:
public function setUp() {
$client = static::createClient();
$container = $client->getContainer();
$doctrine = $container->get('doctrine');
$entityManager = $doctrine->getManager();
$fixture = new YourFixture();
$fixture->load($entityManager);
}
最初に以前のテストデータのテーブルを削除する場合は、少しすっきりとしたアプローチを提供したかっただけです。テストを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を使用することをお勧めします。次に、_Liip\FunctionalTestBundle\Test\WebTestCase
_からWebTestCase
を拡張します。これにより、フィクスチャの配列を引数として取る$this->loadFixtures()
を呼び出すことができます。
_$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);
_
詳細については、短い blogpost を作成しました。