簡體   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