2014-09-24 38 views
1

我現在正努力嘗試一些代碼。 我在一個laravel 4項目上工作。從現在開始,我們使用PhpUnit來正常測試,但是我們的頁面中有太多的Javascript用一個簡單的DomCrawler來進行驗收測試,這是不合理的。 首先,我在流浪的虛擬機上安裝了硒+鉻。花了我一些時間,但我設法讓它工作,這意味着我可以瀏覽Webdriver網頁(/ wd/hub),然後使用chrome成功創建一個新的會話。使用codeception和laravel

下一I經由作曲家 安裝codeception我確實

codecept自舉

我加入Laravel4作爲一個模塊來acceptance.suite.yml

class_name: AcceptanceTester 
modules: 
    enabled: 
     - WebDriver 
     - AcceptanceHelper 
     - Laravel4 
    config: 
     WebDriver: 
      url: 'https://192.168.33.10/' 
      browser: 'chrome' 

我做了codecept建立。 然後我寫了一個非常簡單的acceptanceTest只是爲了檢查,如果一切正常:

[LogicException] 必須調用之一:

$I = new AcceptanceTester($scenario); 
$I->am('a member'); 
$I->wantTo('connect'); 
$I->amOnRoute('login'); 
$I->see('someText'); 

當我做了codecept運行它在屏幕上產生一個錯誤in()或append()方法,然後迭代Finder。

在Selenium WebDriver Page中,它表示chrome會話已創建。

我做了一些關於thet錯誤的搜索。它來自Symfony的Finder組件。

有人可以幫助我嗎?

回答

5

如果你想讓WebDriver或Laravel4作爲你的「瀏覽器」,你將不得不選擇,不幸的是你不能同時擁有這兩個,這可能是你的問題的根源。如果你需要使用Javascript,你可能需要保留WebDriver並且放鬆一些Laravel的功能,但在我看來並不多。如果你真的需要Laravel,這是我創建得到它_support/FunctionalHelper內的輔助:

public function getLaravel4() 
{ 
    if (! isset($this->laravel4)) 
    { 
     $this->laravel4 = (new \Codeception\Module\Laravel4()); 

     $this->laravel4->kernel = app(); 
    } 

    return $this->laravel4; 
} 

因此,在您的測試,你只需要:

$L = $I->getLaravel4(); 

但是,請記住,因爲Laravel是不是你的瀏覽器之類的東西:

$L->amOnRoute('login'); 

不會工作,但你能夠做到的事情不相關的瀏覽,如:

$L->seeRecord('users', [ 
    'email' => '[email protected]', 
    'first_name' => 'a', 
    'last_name' => 'b' 
]); 

此外,您還可以啓動laravel您_bootstrap文件:

include __DIR__ . '/../vendor/autoload.php'; 
$app = require_once __DIR__ . '/../bootstrap/start.php'; 
$app->boot(); 

而且具有直接訪問IoC容器:

$app = app(); 

$app['config']->get('...'); 

甚至外牆:

DB::table('users')->... 
+0

人你的搖滾樂......到目前爲止的完美答案 – elfif 2014-09-24 13:47:53

+0

哈哈!謝謝。編輯以顯示啓動Laravel並直接訪問IoC的方法。 – 2014-09-24 13:55:30

+0

非常有趣的是,當我看到你的帖子的時候,我也正在竊聽_bootstrap。你似乎比那些事情要快......再次感謝 – elfif 2014-09-24 14:06:10