Symfony 2 功能测试
Symfony 2 Functional test
在我的一项功能测试中,我遇到了一个对我来说不太合乎逻辑的问题。
测试很简单,就是请求首页,搜索其中有某个class的元素
主页用于显示文章列表的博客。每篇文章可以有多个页面(一对多),每个页面都有自己的特色图片。
在主页上(在 twig 中)我执行 $article->getPages()->first()->getImageUrl()。
如果我使用相同的固定装置并从浏览器访问页面,所有内容都会按应有的方式显示,但是当我 运行 测试时它会抛出异常 "Could not access getImageUrl on unknown object",这让我觉得它不会从数据库中提取文章页面。
更奇怪的是,如果我在测试中直接查询数据库中的文章并遍历它们都有效的文章($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() ->清除();
在我的一项功能测试中,我遇到了一个对我来说不太合乎逻辑的问题。
测试很简单,就是请求首页,搜索其中有某个class的元素
主页用于显示文章列表的博客。每篇文章可以有多个页面(一对多),每个页面都有自己的特色图片。
在主页上(在 twig 中)我执行 $article->getPages()->first()->getImageUrl()。
如果我使用相同的固定装置并从浏览器访问页面,所有内容都会按应有的方式显示,但是当我 运行 测试时它会抛出异常 "Could not access getImageUrl on unknown object",这让我觉得它不会从数据库中提取文章页面。
更奇怪的是,如果我在测试中直接查询数据库中的文章并遍历它们都有效的文章($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() ->清除();