2

Yii アプリケーションをPHPUnitandで単体テストしていますSelenium-server

コード:

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 フレームワークはこれをサポートしていませんか? それとも私は何か間違ったことをしていますか?

4

2 に答える 2

3

url をメソッドとして使用する代わりに、プロパティとして試してください。

$this->url

私は今仕事をしていて、これをチェックすることができます。Seleniumを使用したPHPUnitの適切なコードは次のとおりだと思います:

$driver->getCurrentPageUrl();

したがって、これはドライバー インスタンスのメソッドです。

于 2013-05-14T15:25:43.943 に答える
0

これは、テストで拡張した Yii クラスのPHPUnit_Extensions_SeleniumTestCase_Driver祖先クラスであることがわかりました。WebTestCase

PHPUnit_Extensions_SeleniumTestCase_Driver現在のブラウザの URL を保持するメソッド getLocation() を実装します。これにより、使用できます$this->getLocation()

SeleniumTestCase_Driver クラス リファレンス

私のコードの結果:

//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()
);
于 2013-05-15T08:46:24.483 に答える