这是我的情景。我们在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,我可以看到修改后的数据。为什么?实体在测试和控制器中由不同的实体管理器跟踪?缓存?
任何帮助表示赞赏
答案 0 :(得分:3)
尝试添加:
$this->em->clear();
在访问(更新的)数据之前清除您的实体管理器。这将强制实体管理器清除它可能对先前对象的任何引用,并将从您的连接重新加载它们。这应该显示更新的数据。