我遇到了一个问题,在我的一个功能测试中,这个问题对我来说没有太多逻辑。
测试非常简单,它只是请求主页,并搜索包含某个类的元素。
主页用于显示文章列表的博客。每篇文章可以有多个页面(一对多),每个页面都有自己的特色图片。
在主页(在树枝中)我做$article->getPages()->first()->getImageUrl()。
如果我使用相同的灯具并且我从浏览器访问页面,则所有内容都会按原样显示,但是当我运行测试时,它会抛出异常"无法访问未知对象上的 getImageUrl",这让我认为它没有从数据库中提取文章页面。
更奇怪的是,如果我直接在测试中查询自己的数据库以获取文章并迭代它们都有效的文章($article->getPages()->first()->getImageUrl())。只有当使用 self::$client->request() 调用时,它才不起作用。
我检查了夹具,甚至在查询构建器上添加了显式的innerJoin(),并手动检查数据库是否具有正确的数据。
此外,我还有其他功能测试可以加载自己的夹具,它们都可以工作,除了这个。
这是我下面测试的代码。单独运行时和使用整套测试执行时,它都会失败。
public function testSocialBoxPositionWithFeatured()
{
self::runCommand('h4cc_alice_fixtures:load:files --drop src/SNN/AdminBundle/Fixtures/Nelmio.yml');
$crawler = self::$client->request('GET', '/'); //go to homepage
$classes = $crawler
->filter('.postsContainer > .col-md-4')
->eq(5)
->children()
->first()
->attr("class");
$this->assertContains("socialBox", $classes);
}
提前感谢,
我发现清除实体管理器会使我的测试正常工作......所以我简单地添加了self::$client->getContainer()->get('doctrine')->getManager()->clear();