使用可责怪行为时的Yii2测试

ddi*_*hev 5 php yii2

我有一个使用Blameable行为的模型:

class Vehicle extends ActiveRecord 
{
    // ...
    public function behaviors()
    {
        return [
            'blameable' => [
                'class' => BlameableBehavior::className(),
                'createdByAttribute' => 'UserID',
                'updatedByAttribute' => null,
            ]
        ];
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试Vehicle使用特定的UserID 保存要测试的实例时,Blameable将使用null覆盖该实例(因为没有用户设置为当前登录用户),并且模型的保存将失败。

这段代码说明了到目前为止我是如何解决此问题的:

$owner = $this->createUser(); // creates user with fake data
Yii::$app->user->setIdentity($owner);
$vehicle = $this->createVehicle(); // creates vehicle and relies that the $owner->UserID will be set when vehicle is being saved
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢它,因为尚不清楚为什么要事先设置用户身份。有没有办法禁用Blameable测试中的行为?

Sil*_*ire 3

只需在方法中分离 BlamableBehavior,createVehicle()如下所示:

public function createVehile()
{
    $vehicle = new Vehicle();
    $vehicle->detachBehavior('blameable');
    // ...
}
Run Code Online (Sandbox Code Playgroud)