2013-05-14 155 views
2

我用PHPUnitSelenium-server單元測試了我的Yii應用程序。如何斷言當前的URL?

代碼:

class StartSurveyRedirectTest extends WebTestCase 
{ 
    public $fixtures=array(
    'sessions'=>'SurveySession', 
    'surveys' => 'Survey', 
); 

    public function testActive() { 
    $survey = $this->surveys('survey_active'); 
    $user_id = 1; 
    $imid = 'nl1234-9876'; 
    $this->open('veldwerk/survey/redirect?survey_id=' . $survey->survey_id . 
     '&user_id=' . $user_id . 
     '&imid=' . $imid . 
     '&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue() 
    ); 

    //assert if redirected 
    $this->assertNotEquals($this->url(),TEST_BASE_URL . 
     'veldwerk/survey/redirect?survey_id=' . $survey->survey_id . 
     '&user_id=' . $user_id . 
     '&imid=' . $imid . 
     '&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue() 
    ); 
    } 
} 

當我開始測試結果:

There was 1 error: 

1) StartSurveyRedirectTest::testActive 

Method url not defined. 

D:\workspace\Pi\framework\test\CWebTestCase.php:63 
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27 
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27 

Caused by 
BadMethodCallException: Method url not defined. 

D:\workspace\Pi\framework\test\CWebTestCase.php:63 
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27 
D:\workspace\Pi\protected\tests\functional\StartSurveyRedirectTest.php:27 

所以我真正想要測試是如果用戶被重定向。我認爲最簡單的方法是檢查URL,但事實證明它不起作用?雖然在硒文檔和PHPUnit文檔說它可以..

Yii框架不支持這?或者我做錯了什麼?

回答

-1

原來PHPUnit_Extensions_SeleniumTestCase_Driver是我的測試中延伸的Yii類的WebTestCase的祖先類。

PHPUnit_Extensions_SeleniumTestCase_Driver實現了保存當前瀏覽器url的getLocation()方法。這允許我使用$this->getLocation()

SeleniumTestCase_Driver class reference

我的代碼的結果是:

//assert if redirected 
$this->assertNotEquals($this->getLocation(),TEST_BASE_URL . 
    'veldwerk/survey/redirect?survey_id=' . $survey->survey_id . 
    '&user_id=' . $user_id . 
    '&imid=' . $imid . 
    '&' . $survey->security_parameter_name . '=' . $survey->getSecurityParameterValue() 
); 
3

而不是使用URL作爲方法,嘗試,因爲它的屬性:

$this->url

我在工作我現在和我能夠檢查了這一點。我覺得PHPUnit的硒正確的代碼是:

$driver->getCurrentPageUrl();

因此,它是從驅動程序實例的方法。

+0

感謝,但對類'未知屬性 '網址'「StartSurveyRedirectTest'.'記住我測試一個Yii應用程序 – 2013-05-15 06:39:04

+0

我已經更新了我的答案和正確的路徑來獲取網址。爲什麼測試用YII編寫的應用程序很重要?測試本身不是寫在Yii上的嗎?我不確定'StartSurveyRedirectTest'是什麼,但是應該創建一個新的'WebDriver'實例,並且該變量是我們需要從'getCurrentPageUrl()'調用的那個變量。合理? – ragamufin 2013-05-15 07:48:07

+0

謝謝@ragamuffin讓我知道司機。我能夠確定這個驅動程序是'PHPUnit_Extensions_SeleniumTestCase_Driver'的一個實例,它讓我找出答案 – 2013-05-15 08:44:04