无法通过Codeception在数据库中保存新的“ActiveRecord”

时间:2018-03-29 10:50:28

标签: unit-testing activerecord yii2 codeception

我有一个简单的单元测试,我正在尝试在“orders”表中创建一个新记录。因此,当测试运行时,它会引发异常:

[yii\db\IntegrityException] SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'created_by' cannot be null

我想这是因为所谓的“BlamemableBehavior”试图更新“created_by”列。所以我试图分离它并手动传递“created_by”值。两者都没有奏效。你能帮忙吗?

<?php
namespace frontend\tests\unit\models;

// use common\fixtures\UserFixture;
use frontend\components\Payments;
use common\models\order\Order;

class RandomTest extends \Codeception\Test\Unit
{
    /**
     * @var \frontend\tests\UnitTester
     */
    protected $tester;

    protected $order;

    public function _before(){
        //this doesn't work
        $this->order = $this->tester->haveRecord(Order::class,
            [
                'id' => 577,
                'payment_type' => 4,
                'status' => 1,
                'amount' => 1,
                'created_by' => 561,
                'updated_by' => 561,
            ]);
    }

    public function testRandom(){
        //this does not work either
        /*$model = new Order;
        $model->detachBehavior('BlameableBehavior');
        $model->payment_type = 4;
        $model->status = 1;
        $model->amount = 1;
        $model->created_by = 561;
        $model->updated_by = 561;
        $model->save();*/
    }
}

“订单”模式:

public function behaviors()
    {
        $behaviors = parent::behaviors();

        $behaviors[] = [
            'class' => \common\components\behaviors\modelLog\ActiveRecordHistoryBehavior::className(),
            'manager' => '\common\components\behaviors\modelLog\managers\DBManager',
            'ignoreFields' => ['updated_at', 'created_at']
        ];

        return $behaviors;
    }

    /**
     * @inheritdoc
     */
    public function scenarios()
    {
        $scenarios = parent::scenarios();

        $scenarios['paid'] = [
            'status', 'invoice_number', 'paid_date', 'is_used', 'allocation'];

        return $scenarios;
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['status', 'payment_type', 'invoice_reference', 'invoice_number'], 'integer'],
            [['payment_type', 'amount', 'vat', 'total_amount', 'credit', 'invoice_reference'], 'required'],
            [['amount', 'vat', 'total_amount', 'credit', 'discount'], 'number'],
            [['reason'], 'trim'],
            [['allocation'], 'string']
            ];
    }

0 个答案:

没有答案