4

Zend Framework で作成した現在のプロジェクトのテストを作成しています。すべて問題ありませんが、ログに記録されたユーザーのアクション/コントローラーのテストに問題があります。アクション/コントローラーを実行するには、ログインする必要があります。

PHPUnit にログインするにはどうすればよいですか?

4

4 に答える 4

7

アクション/コントローラーをテストしたいと言っているように、ユニットテストではなく、機能/統合テストを書いていると思います-つまり、Zend_TestMVCを使用してテストします。

これは、ログインがOKかどうかをテストしているプロジェクトで使用したテスト関数です。

public function testLoggingInShouldBeOk()
{
    $this->dispatch('/login/login');
    $csrf = $this->_getLoginFormCSRF();
    $this->resetResponse();
    $this->request->setPost(array(
        'login' => 'LOGIN',
        'password' => 'PASSWORD',
        'csrfLogin' => $csrf,
        'ok' => 'Login',
    ));
    $this->request->setMethod('POST');
    $this->dispatch('/login/login');
    $this->assertRedirectTo('/');
    $this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}

簡単に: ログインフォームをロードし、CSRF トークンを抽出し、フォームに入力して投稿します。

次に、接続されているかどうかをテストできます。


これにより、おそらくログイン部分を抽出して、有効なユーザーがログインする必要がある各テストの前に呼び出すことができます。

于 2009-11-27T11:19:03.170 に答える
1

この記事が役立つと思います: http://perevodik.net/en/posts/7/ ログインしているユーザーと同等の状態に環境を設定するために使用できる偽の ID を作成する方法について説明しています。

于 2010-10-27T10:30:35.537 に答える
1

別の方法があります。私のUserエンティティにはlogin()、ユーザーのIDをセッションと静的変数に入れるメソッドがあります。私がテストで行っているのsetUp()は呼び出し$user->login()であり、機能します。テスト環境ではセッションは使用されず (設定Zend_Session::$isUnitTested = trueにはこの効果があります)、テストは静的変数に依存します。上の静的変数 (logout()ユーザー)をクリアすることを忘れないでtearDown()ください。

于 2009-11-27T11:33:40.830 に答える
0

Pascal がこの関数を使用しているのとほとんど同じ方法で:

$this->_getLoginFormCSRF();

フォーム要素マネージャーを使用してフォームをロードして値を返す汎用関数を作成しました。

public function _getCSRFHashValueFromForm($formAlias, $csrfName) { $form = $this->servicemanager->get('FormElementManager')->get($formAlias); return $form->get($csrfName)->getValue(); }

もちろん、これはCSRFがフィールドセット内ではなくフォームにバインドされていることを前提としています。

于 2013-09-10T19:48:49.920 に答える