mockApplication([ 'components' => [ 'db' => [ 'class' => '\yii\db\Connection', 'dsn' => 'sqlite::memory:', ], ], ]); $columns = [ 'name' => 'string', 'created_by' => 'integer', 'updated_by' => 'integer', ]; Yii::$app->getDb()->createCommand()->createTable('test_blame', $columns)->execute(); } public function tearDown() { Yii::$app->getDb()->close(); parent::tearDown(); gc_enable(); gc_collect_cycles(); } public function testDefaultValue() { $model = new ActiveRecordBlameableConsole([ 'as blameable' => [ 'class' => BlameableBehavior::className(), 'defaultValue' => 2 ], ]); $model->name = __METHOD__; $model->beforeSave(true); $this->assertEquals(2, $model->created_by); $this->assertEquals(2, $model->updated_by); } public function testDefaultValueWithClosure() { $model = new ActiveRecordBlameableConsoleWithDefaultValueClosure(); $model->name = __METHOD__; $model->beforeSave(true); $this->assertEquals(11, $model->created_by); $this->assertEquals(11, $model->updated_by); } } class ActiveRecordBlameableConsoleWithDefaultValueClosure extends ActiveRecordBlameableConsole { public function behaviors() { return [ 'blameable' => [ 'class' => BlameableBehavior::className(), 'defaultValue' => function () { return 10 + 1; } ], ]; } } /** * Test Active Record class with [[BlameableBehavior]] behavior attached. * * @property string $name * @property int $created_by * @property int $updated_by * * @property BlameableBehavior $blameable */ class ActiveRecordBlameableConsole extends ActiveRecord { public function behaviors() { return [ 'blameable' => [ 'class' => BlameableBehavior::className(), ], ]; } public static function tableName() { return 'test_blame'; } /** * @return BlameableBehavior */ public function getBlameable() { return $this->getBehavior('blameable'); } public static function primaryKey() { return ['name']; } }