我正在尝试使用代码单元测试来测试我的应用程序。我遇到的问题是,当我尝试测试扩展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()结束。 我怀疑也许某个地方的属性数组会以某种方式丢失。 我一直在尝试自己解决这个问题,所以任何想法都会受到赞赏。
提前谢谢你。