在功能测试的控制器中运行时,KNP Menu Bundle不会访问实体

时间:2013-10-31 16:55:47

标签: php symfony doctrine-orm knpmenubundle knpmenu

这个真让我难过。

我正在尝试对我的应用程序运行功能测试,但是我遇到了KNP菜单包的问题,​​我不确定我哪里出错。

我有一些实体被Doctrine Fixtures加载,我知道它们在那里 - 测试套件的其他任何部分都没有找到它们并断言它们是我想要它们的问题。

在我的setUp()测试方法(扩展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' )产生了它应该做的事情,所以据我所知,这是实体经理的一个问题。

如果需要更多代码,我将非常乐意与您分享。

编辑:我可能会采取我所说的 - 现在似乎并没有在任何地方加载实体。也许还有数据库中还有一些东西!

0 个答案:

没有答案