データベースにいくつかのものを作成して永続化する機能テストがあり、正しい数のアイテムが挿入されたことをテストしたいと思います (現在、1 つではなく 2 つを挿入するシナリオがあります)。
コントローラーではすべてが機能しているように見えますが、(コントローラーで) 以下のコードを使用してデバッグすると、予想される (間違った) 値「2」が得られます。
$em = $this->getDoctrine()->getManager();
$fooRepo = $em->getRepository('CompanyProjectBundle:Foo');
$foos = $fooRepo->retrieveByBar(3);
echo count($foos); // Gives a result of 2
ただし、 Test クラス内から同様のことを試みると、ゼロになります...
/**
* {@inheritDoc}
*/
protected function setUp()
{
static::$kernel = static::createKernel();
static::$kernel->boot();
$this->em = static::$kernel->getContainer()
->get('doctrine')
->getManager()
;
$this->em->getConnection()->beginTransaction();
}
/**
* {@inheritDoc}
*/
protected function tearDown()
{
parent::tearDown();
$this->em->getConnection()->rollback();
$this->em->close();
}
public function testFooForm()
{
// ... do some testing
$fooRepo = $this->em->getRepository('CompanyProjectBundle:Foo');
$foos = $fooRepo->retrieveByBar(3);
echo count($foos); // gives a result of ZERO
// ... more happens later
}
別のエンティティ マネージャーなどを取得していますか? アプリが実行されているのと同じデータを表示できるように、正しい EM を取得するために他の方法を使用する必要がありますか?
すべてがトランザクション (テスト クライアントが破棄されるとロールバックされる) 内で実行されますが、それは上記のスニペットの後に発生します。