[英]Symfony3 testing the redirectToRoute() method with phpunit
我正在嘗試通過PHPUnit對Symfony3控制器進行最簡單的(我認為)功能測試之一。
我的控制器代碼只是一個重定向:
class DefaultController extends Controller
{
public function indexAction()
{
return $this->redirectToRoute('admin_dashboard', array(), 301);
}
}
我的測試功能如下:
class DefaultControllerTest extends WebTestCase
{
public function testIndex()
{
$client = static::createClient(array(), array(
'HTTP_HOST' => 'www.admin.dev',
));
$client->request('GET', '/');
$client->followRedirect();
$this->assertTrue($client->getResponse()->isRedirect('/dashboard/'));
}
}
我在這里得到的錯誤如下:
LogicException: The request was not redirected
另外,對於某些值,我得到的一些結果如下:
$client->getRequest()->getUri() -> "http://www.admin.dev/"
$client->getResponse()->getStatusCode() -> 404
$client->getResponse() instanceof RedirectResponse -> false
$client->getResponse()->headers->get('location') -> null
有關此問題的更多背景信息:
例如:
www.admin.dev -> admin bundle
www.admin2.dev -> admin2 bundle
www.admin3.dev -> admin3 bundle
有什么想法讓我困擾於這個簡單的問題嗎?
我的路由配置是:
homepage:
host: "www.%domain%"
path: /
defaults: { _controller: MyBundle:Default:index}
admin_dashboard:
host: "www.%domain%"
prefix: /dashboard
path: /
defaults: { _controller: MyBundle:Dashboard:index}
和
%domain% is a parameter in the parameter file. The value is 'admin.dev'
您正在嘗試這個。 這是工作。
$host="www.admin.dev" // $host= "http://127.1.1.2(local ip)"
public function testIndex()
{
$client = static::createClient(array(), array(
'HTTP_HOST' => $host,
));
$client->request('GET', '/forgetpass');
$this->assertEquals(true,$client->getResponse()->isRedirect('/dashboard'));
}
最后我解決了。 感謝ccKep為我指出正確的方向。 我所有的域都有自己的環境,因此,所有路由都不可用。 喜歡:
www.admin.dev -> loads routes for only admin bundle
www.admin2.dev -> loads routes for only admin2 bundle
www.admin3.dev -> loads routes for only admin3 bundle
因此,要解決該問題,我首先通過調用以下命令來調試“測試”環境的路由(因為該環境負責測試):
php bin/console debug:router --env=test
並發現它僅包含通用路由,而不包含域特定路由。 因此,為了將路由包含在測試環境中,我將域的路由信息包含在測試路由文件中。
我有3個域指向我的項目:
www.admin.dev
www.admin2.dev
www.admin3.dev
根據此域的不同,捆綁軟件的加載方式為:
www.admin.dev -> loads MyAdminBundle
www.admin2.dev -> loads MyAdmin2Bundle
www.admin3.dev -> loads MyAdmin3Bundle
我的每個域都有2個環境,分別是:
www.admin.dev -> dev_admin and prod_admin
www.admin2.dev -> dev_admin2 and prod_admin2
www.admin3.dev -> dev_admin3 and prod_admin3
根據這些域及其環境,我定義了我的配置和路由,以便在調用www.domain.dev
時,它將根據其環境使用配置,路由以及相應的捆綁軟件,而MyAdmin2Bundle或MyAdmin3Bundle或任何他們的路線或配置。
為了更清楚一點,我有如下配置文件:
config.yml
config_dev.yml
config_dev_domain.yml
config_dev_domain2.yml
config_dev_domain3.yml
config_prod.yml
config_prod_domain.yml
config_prod_domain2.yml
config_prod_domain3.yml
config_test.yml
和路由文件,如:
routing.yml
routing_dev.yml
routing_dev_domain.yml
routing_dev_domain2.yml
routing_dev_domain3.yml
routing_prod.yml
routing_prod_domain.yml
routing_prod_domain2.yml
routing_prod_domain3.yml
routing_test.yml
現在,我所做的只是將domain,domain2和routing_test.yml
的路由文件包含到routing_test.yml
。 我希望這足以理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.