繁体   English   中英

如何将Symfony DomCrawler与Laravel的子域路由一起使用?

[英]How do I use the Symfony DomCrawler with Laravel's subdomain routing?

目前,我的网站旨在服务于多个子域,如下所示:

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上找到的唯一子域文档告诉我执行此操作(假设这是我测试的第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肯定可以正常解决,并且没有我看到的问题。 尝试强制为子域添加标头似乎是一个特定的问题。

即使没有解决方案,如何正确调试呢? 我想弄清楚为什么它不起作用/哪里失败了,因为这是我第一次编写测试。

我开始了一个空白项目,该项目只是尝试使用子域路由来处理此问题,并且效果很好。 我意识到问题必须出在我写的东西上。

事实证明,问题实际上出在我为检索域而编写的帮助程序中。 它试图访问$ _SERVER在运行时不可用的var。 如果无法检索值,则返回一个dev域解决了我的问题。

试试这个:

public function refreshApplication() 
{
    parent::refreshApplication();

    $this->client = $this->createClient(
        array('HTTP_HOST' => 'site1.domain.dev'));
}

public function testSomething()
{
    $crawler = $this->client->request('GET', '/something');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM