如何在没有缓存的情况下使用Doctrine导致功能控制器测试?

时间:2013-12-13 15:49:51

标签: symfony doctrine-orm

这是我的情景。我们在symfony 2中编写了功能测试,测试设置启动了内核:

public function setUp()
{
    $this->client = static::createClient();
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $container = static::$kernel->getContainer();

    $this->doctrine = $container->get('doctrine');
    $this->em = $this->doctrine->getManager();

    self::setupTestData();
}

最后一步是调用设置测试数据的例程。它将实体管理器$ this-> em传递给该例程。这一切都按预期工作,测试数据可用于控制器中的代码。

控制器更新一些相同的实体,因此在测试中我使用相同的实体管理器来获取此数据并验证结果。对于记录,UI没有这些字段可用,它们由不同的代码库使用,因此我们被迫在测试中加载实体并验证这种方式。像:

$repository = $this->doctrine->getRepository('MyBundle:Namespace\AutoSearch');
$autoSearch = $repository->findBy(array('Autosearch_ID' => $this->autoSearchId));
//verify expected values

使用findBy或DQL我只从测试设置中获取原始数据,而不是控制器修改的更新数据。如果我使用SQL,我可以看到修改后的数据。为什么?实体在测试和控制器中由不同的实体管理器跟踪?缓存?

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:3)

尝试添加:

$this->em->clear();

在访问(更新的)数据之前清除您的实体管理器。这将强制实体管理器清除它可能对先前对象的任何引用,并将从您的连接重新加载它们。这应该显示更新的数据。