【问题标题】:PHPUnit deletes database records for Yii unit testingPHPUnit 删除 Yii 单元测试的数据库记录
【发布时间】:2013-04-13 09:55:45
【问题描述】:

我正在使用 phpunit 在 Yii 中运行单元测试。所有测试都通过了,但是当我期望看到三个时,它在数据库中留下了一条记录,一条用于测试登录时的固定装置,两条来自我在测试会员注册时调用的 ARO 保存。

我在一个专门用于测试的单独数据库中执行此操作。这是我应该关注的事情还是可能与拆卸有关的典型行为?

“testReg”的记录保留在此代码之后的数据库中,即使它保存在“testReg2”之前。如果我注释掉该保存,“testReg2”仍然存在。如果我注释掉这两个,夹具数据仍然存在。

这是测试:

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 类中。成员类扩展用户类。

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

【问题讨论】:

  • 您的 PK 是否可能未设置为自动增量?我还注意到您调用的是 $userModel->register() 而不是 $userModel->create()。我假设这是设计使然,但您可能会检查 register 是否正常运行。
  • 按设计在 PK 上是,在 register() 上是。使用 register() 方法的成员模型使用 create() 方法扩展了 User 模型。我将添加一个具有不同工作流程的 Admin 类。在单元测试中,我创建了检查新创建记录是否存在的断言。当我运行测试时,它们都通过了。到目前为止,一切都在前端工作,所以我想将此归因于设置或拆卸,尽管我找不到它的文档。
  • 我问的原因是因为我遇到了一个类似的问题,模型将它的记录保存在以前的条目上。如果我没记错的话,这与 PK 未设置为 AI 有关,但我在模型规则中将 PK 标记为“安全”。我想不出发生这种情况的另一个原因。您的代码对我来说看起来不错,一旦测试完成,夹具/单元测试应该将所有数据放在一起 - 在这种情况下,您应该看到您创建的所有用户以及您的夹具数据。

标签: unit-testing yii phpunit


【解决方案1】:

我在 register() 之后断言检查记录是否存在并且它通过了。一切都在前端工作,所以现在我将其归因于拆解,尽管我找不到明确的文档。

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多