我正在尝试编写symfony 2功能测试。这是我的代码:
<?php
namespace WebSite\MainBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ProductControllerTest extends WebTestCase
{
public function testPageContents()
{
$domCategoryLinksExpr = '.catalog-col-block > ul > li > a';
$client = static::createClient();
$crawler = $client->request('GET', '/catalog/');
$this->assertTrue($client->getResponse()->getStatusCode() == '200');
$countCategories = $crawler->filter($domCategoryLinksExpr)->count();
$this->assertTrue($crawler->filter($domCategoryLinksExpr)->count() > 0);
$categoryLink = $crawler->filter($domCategoryLinksExpr)->eq(rand(1, $countCategories))->link();
$crawler = $client->click($categoryLink);
}
}
但是当我运行这个测试时:
phpunit -c app src/WebSite/MainBundle/Tests/Controller/
我明白了:
1)WebSite \ MainBundle \ Tests \ Controller \ ProductControllerTest :: testPageContents Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:找不到“GET /app_dev.php/catalog/psp”的路由 ...
/app_dev.php/catalog/psp
是$categoryLink->getUri()
的动态值。和
此路由存在且在Web浏览器中正常工作。有什么想法吗?
UPD:
这是我的路由规则:
routing_dev.yml:
...
_main:
resource: routing.yml
....
routing.yml:
....
WebSiteCategoryBundle:
resource: "@WebSiteCategoryBundle/Controller/"
type: annotation
prefix: /
....
src/WebSite/CategoryBundle/CategoryController.php:
/**
* @Route("/catalog")
*/
class CategoryController extends Controller
{
/**
* @Route("/{alias}", name="show_category" )
* @Template()
*/
public function showAction( $alias )
{
// some action here
}
}
它在浏览器中运行良好,但似乎$ crowler确实没有看到这个注释规则。
UPD2:问题发生在Symfony 2标准版中缺少的“routing_test.yml”中。 所以我创造了它:
routing_test.yml:
_main:
resource: routing_dev.yml
并且异常消失。谢谢大家。
答案 0 :(得分:1)
如果您发布了routing.yml
,那就太好了您还可以查看: http://symfony.com/doc/master/bundles/SensioFrameworkExtraBundle/annotations/routing.html
您可以在行动中使用路线注释。
要解决您的问题,我希望看到您的路由配置。
答案 1 :(得分:0)
echo $ client-&gt; getResponse() - &gt; getContent()将帮助您进行调试(即使有例外)。它将输出请求的html。
看起来你的路线不存在,可能位置错误(指定了错误的环境?)