目前,我的网站旨在提供多个子域名,如下所示:
Route::group(array('domain' => 'site1'.AppHelper::getDomain()), function(){
Route::get('{state?}/{variant?}', array("uses" => 'Site1Controller@showIndex'));
});
Route::group(array('domain' => 'site2'.AppHelper::getDomain()), function(){
Route::get('{state?}/{variant?}', array("uses" => 'Site2Controller@showIndex'));
});
Route::group(array('domain' => 'site3'.AppHelper::getDomain()), function(){
Route::get('{state?}/{variant?}', array("uses" => 'Site3Controller@showIndex'));
});
现在我想编写一些测试来抓取这些页面以检查特定内容。不幸的是,我在Symfony DomCrawler上找到的唯一documentation子域名告诉我这样做(让我们说这是我测试的第312行):
$crawler = $this->$client->request('GET', '/', array(), array(), array(
'HTTP_HOST' => 'site1.domain.dev',
'HTTP_USER_AGENT' => 'Symfony/2.0',
));
不幸的是,当我运行PHPUnit并进入此测试时,我看到了这一点:
1) SiteTest::testSite1ForContent
Symfony\Component\HttpKernel\Exception\NotFoundHttpException:
/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1429
/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1050
/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1014
/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:576
/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:597
/var/www/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:81
/var/www/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:339
/var/www/app/tests/SiteTest.php:312
那么我在这里不理解的是什么? site1.domain.dev肯定会正常解析并且没有我能看到的问题。这似乎是一个特定的问题,试图强制子域的标题。
即使不是解决方案,我该如何正确调试?我想弄清楚它为什么不起作用/它失败了,因为这是我第一次尝试编写测试。
答案 0 :(得分:0)
我开始了一个空白项目,试图通过子域路由来处理这个问题,并且它工作得很好。我意识到这个问题必须与我写的一样。
原来问题实际上是我写的一个帮助器来检索域名。它试图访问运行时测试无法使用的$ _SERVER变量。如果它无法检索值,那么返回一个开发域就解决了我的问题。
答案 1 :(得分:0)
试试这个:
public function refreshApplication()
{
parent::refreshApplication();
$this->client = $this->createClient(
array('HTTP_HOST' => 'site1.domain.dev'));
}
public function testSomething()
{
$crawler = $this->client->request('GET', '/something');
}