これは本当に私を困惑させます。
アプリケーションで機能テストを実行しようとしていますが、KNP メニュー バンドルで問題が発生しており、どこが間違っているのか完全にはわかりません。
Doctrine Fixtures によってロードされているいくつかのエンティティがあり、それらがそこにあることはわかっています。テストスイートの他の部分では、それらを見つけて、それらが私が望むものであると主張することに問題はありません。
私setUp()
のテスト方法 (extending WebTestCase
) では、クライアントを作成し、エンティティ マネージャーを挿入します。次のようにします。
/**
* Create Client and inject services
*/
$this->client = static::createClient();
$this->client->getContainer()->set( 'doctrine.orm.entity_manager', $this->em );
他のテストでは、そのエンティティ マネージャーの使用とエンティティの検索に問題はありません。
メニューをサービスとして使用しています。定義は次のとおりです。
the_site.menu_builder:
class: TheSite\SiteBundle\Menu\MenuBuilder
arguments: [ "@knp_menu.factory", "@doctrine.orm.entity_manager" ]
the_site.menu.breadcrumb:
class: Knp\Menu\MenuItem
factory_service: the_site.menu_builder
factory_method: breadcrumbMenu
arguments: [ "@request" ]
scope: request
tags:
- { name: knp_menu.menu, alias: breadcrumb }
窒息しているように見えるコードは次のとおりです。
public function breadcrumbMenu( Request $request )
{
// ......
/**
* @var $category NewsCategory
*/
$category = $this->em->getRepository( 'TheSiteSiteBundle:Category' )->findOneByCanonical( $request->get( 'category' ) );
$categories = [];
do
{
$categories[] = $category;
$category = $category->getParent();
} while( $category !== null );
// .....
}
少し調査を行いました (いくつかの非常に複雑な var_dump'ing ;) を含む)、フィクスチャによって設定されたカテゴリが見つからないようです。それが少しでも役に立てば、エンティティはドクトリン トランザクション内に設定されますが、それでも - 他のテストでは、クライアントがそれらのエンティティを問題なく見つけることができたことが証明されました!
$request->get( 'category' )
私が見る限り、それはエンティティマネージャーの問題です。
さらにコードが必要な場合は、喜んで共有します。
編集:私が言ったことを取り戻すかもしれません-今ではどこにもエンティティをロードしていないようです. たぶん、データベースか何かにまだいくつかあります!