数据库插入yii2框架上的单元测试错误

时间:2016-06-01 11:21:01

标签: unit-testing yii2 codeception

我正在尝试使用代码单元测试来测试我的应用程序。我遇到的问题是,当我尝试测试扩展ActiveRecord类的模型时,我的测试因错误而停止,该错误表示:

yii\base\ErrorException: Trying to get property of non-object
1  C:\xampp\htdocs\vendor\yiisoft\yii2\base\Component.php:541
2  C:\xampp\htdocs\vendor\yiisoft\yii2\db\BaseActiveRecord.php:916
3  C:\xampp\htdocs\vendor\yiisoft\yii2\db\ActiveRecord.php:468
4  C:\xampp\htdocs\vendor\yiisoft\yii2\db\ActiveRecord.php:427
5  C:\xampp\htdocs\vendor\yiisoft\yii2\db\BaseActiveRecord.php:598
6  C:\xampp\htdocs\models\User.php:299
7  C:\xampp\htdocs\models\SignupForm.php:68
8  C:\xampp\htdocs\tests\codeception\unit\models\SignupFormTest.php:168

我尝试深入研究这个并且我发现记录实际上已经保存了,但是测试在执行BaseActiveRecord的afterSave方法时崩溃了。它试图触发afterSave事件并崩溃。

$this->assertTrue(is_null($this->signupForm->signup()), 'If attributes not set validation will fail; null should be returned');
    $attributeArray = [
        'email' => 'test4@email.com',
        'name' => 'Test',
        'surname' => 'User',
        'phone' => '860000000',
        'password' => 'password',
        'repeat_password' => 'password',
        'role' => 'Administrator'
    ];
    $this->signupForm->setAttributes($attributeArray);
    $this->assertInstanceOf(User::className(), $this->signupForm->signup(), 'If attributes set validation will not fail; User should be returned');

我的注册方法:

public function signup()
{
    if ($this->validate()) {
        return User::create($this->attributes);
    }
    return NULL;
}

我的创建方法:

public static function create($attributes)
{
    /** @var User $user */
    $user = new static();
    $user->setAttributes($attributes);
    $user->setPassword($attributes['password']);
    $user->generateAuthKey();
    if ($user->save()) {
        $auth = Yii::$app->authManager;
        $user->role = $auth->getRole($user->role);
        $auth->assign($user->role, $user->id);
        return $user;
    } else {
        return NULL;
    }
}

这一切都以$ user-> save()结束。 我怀疑也许某个地方的属性数组会以某种方式丢失。 我一直在尝试自己解决这个问题,所以任何想法都会受到赞赏。

提前谢谢你。

0 个答案:

没有答案