这是我的场景。我们在 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 传递给该例程。这一切都按预期工作,并且测试数据可供 Controller 中的代码使用。
Controller 更新一些相同的实体,因此在测试中我使用相同的实体管理器来获取这些数据并验证结果。根据记录,UI 没有这些可用字段,它们由不同的代码库使用,因此我们被迫在测试中加载实体并以这种方式进行验证。像:
$repository = $this->doctrine->getRepository('MyBundle:Namespace\AutoSearch');
$autoSearch = $repository->findBy(array('Autosearch_ID' => $this->autoSearchId));
//verify expected values
使用 findBy 或 DQL,我仅从测试设置中获取原始数据,而不是 Controller 修改的更新数据。如果我使用SQL,我可以看到修改后的数据。为什么?测试和 Controller 中不同实体管理器的实体跟踪?缓存?
感谢任何帮助
最佳答案
尝试添加:
$this->em->clear();
在访问您的(更新的)数据之前清除您的实体管理器。这将迫使实体管理器清除它可能对以前的对象的任何引用,并从您的连接中重新加载它们。这应该显示更新的数据。
关于symfony - 如何在功能 Controller 测试中使用 Doctrine 而不缓存结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20570520/