我正在嘗試編寫一個symfony 2功能測試。這是我的代碼:在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)官方網站\ MainBundle \測試\控制器\ 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 does`not看到這個註釋規則。
UPD2:問題出現在Symfony 2標準版中缺少的「routing_test.yml」中。 所以我創建它:
routing_test.yml:
_main:
resource: routing_dev.yml
和異常消失。謝謝大家。 http://symfony.com/doc/master/bundles/SensioFrameworkExtraBundle/annotations/routing.html
您可以在動作中使用的路由註釋:
粘貼您的控制器的代碼和您的路由信息。這將有助於人們爲您提供更好的答案 –