1

データベースにいくつかのものを作成して永続化する機能テストがあり、正しい数のアイテムが挿入されたことをテストしたいと思います (現在、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 を取得するために他の方法を使用する必要がありますか?

すべてがトランザクション (テスト クライアントが破棄されるとロールバックされる) 内で実行されますが、それは上記のスニペットの後に発生します。

4

1 に答える 1

1

ああ...私自身の問題を解決しました。間違った EntityManager を取得していたと思います。カーネルのコンテナーではなく、クライアントのコンテナーを介して EntityManager を取得することで修正しました。

public function testFooForm()
{
    // ... do some testing

    $clientEm = $client->getContainer()->get('doctrine.orm.entity_manager');
    $fooRepo = $clientEm->getRepository('CompanyProjectBundle:Foo');
    $foos = $fooRepo->retrieveByBar(3);
    echo count($foos); // gives the correct result of 2

    // ... more happens later
}
于 2013-10-16T21:26:26.493 に答える