1

phpunit を使用して Yii で単体テストを実行しています。すべてのテストに合格していますが、データベースには 1 つのレコードが残っていますが、3 つ表示されると予想していました。

テスト専用の別のデータベースでこれを行っています。これは私が懸念すべきことですか、それとも典型的な行動はおそらく分解に関連していますか?

「testReg2」の前に保存されていても、「testReg」のレコードはこのコードの後に​​データベースに残ります。その保存をコメントアウトすると、「testReg2」が残ります。この 2 つをコメントアウトすると、フィクスチャ データが残ります。

テストは次のとおりです。

class UserTest extends CDbTestCase
{
public $fixtures=array(
    'users'=>'User',
);

/**
 * Valid user can login to backend
 * @return void
 */
public function testBackendUserLogin()
{
    $model = new LoginForm();
    $model->attributes = array('username'=>'member', 'password'=>'password');
    $this->assertTrue($model->validate(array('username', 'password')));
    $this->assertTrue($model->login());
}

/*
 * Only logged in super-admin or sub-admins with approved accounts may create new members
 * @return void
*/
public function testBackendMemberRegister(){
    $member=new Member();
    $member->register(array(
        'username'=>'testReg',
        'password'=>'password',
    ));
    $member2=new Member();
    $member2->register(array(
        'username'=>'testReg2',
        'password'=>'password',
    ));
}

}

フィクスチャ:

return array(
    'user'=>array(
        'username'=>'member',
        'password'=>'$2a$08$U/z5X4Y1Ok4g20t6DWSwqezgNylpqdjKmrsMFBJDvLqQmOKMG6SvO',
        'created'=>'04-05-2013 00:00:00',
        'modified'=>'04-05-2013 00:00:00',
    )
);

ARO 保存を呼び出すメソッドはクラス User にあります。Member クラスは User クラスを拡張します。

public function create(array $submission){
    $this->attributes=$submission;
    $this->hashPassword();
    $submission['password']=null;   //for safety
    if($this->save()){
        return true;
    }
    return false;
}
4

1 に答える 1

0

register() の後にレコードの存在を確認するアサーションを作成し、合格しました。すべてがフロントエンドで機能しているため、明示的なドキュメントは見つかりませんが、今のところ分解に起因すると考えています。

于 2013-06-04T14:11:46.573 に答える