Как загрузить фикстуру?

Всё про тестирование в Yii 2.0
Ответить
Aleksey Bykov
Сообщения: 14
Зарегистрирован: 2016.06.10, 07:57

Как загрузить фикстуру?

Сообщение Aleksey Bykov »

Коллеги, приветствую.

Не удается загрузить фикстуру - код, управляющий проверкой целостности базы данных выбрасывает исключение Table not found: []:

Exception 'yii\base\InvalidParamException' with message 'Table not found: []' in C:\php-projects\ais\vendor\yiisoft\yii2\db\mssql\QueryBuilder.php:180

Фикстура для модели IdentityDocument:

Код: Выделить всё

<?php

namespace tests\unit\fixtures;

use yii\test\ActiveFixture;

class IdentityDocumentFixture extends ActiveFixture
{
    public $modelClass = 'backend\modules\persons\models\IdentityDocument';
}
Пытаюсь загрузить из @app/tests:

Код: Выделить всё

C:\php-projects\ais\tests\codeception\bin>yii fixture/load IdentityDocument
Fixtures namespace is:
        tests\unit\fixtures

Global fixtures will be used:

        1. yii\test\InitDb

Fixtures below will be loaded:

        1. IdentityDocument

Load above fixtures? (yes|no) [no]:yes
Трассировка вызовов:
0 C:\php-projects\ais\vendor\yiisoft\yii2\db\Command.php(753): yii\db\mssql\QueryBuilder->checkIntegrity(false, '', '') 1 C:\php-projects\ais\vendor\yiisoft\yii2\test\InitDbFixture.php(94): yii\db\Command->checkIntegrity(false, '') 2 C:\php-projects\ais\vendor\yiisoft\yii2\test\InitDbFixture.php(76): yii\test\InitDbFixture->checkIntegrity(false) 3 C:\php-projects\ais\vendor\yiisoft\yii2\test\FixtureTrait.php(114): yii\test\InitDbFixture->beforeUnload() 4 C:\php-projects\ais\vendor\yiisoft\yii2\console\controllers\FixtureController.php(147): yii\console\controllers\FixtureController->unloadFixtures(Array) 5 [internal function]: yii\console\controllers\FixtureController->actionLoad('IdentityDocumen...') 6 C:\php-projects\ais\vendor\yiisoft\yii2\base\InlineAction.php(55): call_user_func_array(Array, Array) 7 C:\php-projects\ais\vendor\yiisoft\yii2\base\Controller.php(154): yii\base\InlineAction->runWithParams(Array) 8 C:\php-projects\ais\vendor\yiisoft\yii2\console\Controller.php(91): yii\base\Controller->runAction('load', Array) 9 C:\php-projects\ais\vendor\yiisoft\yii2\base\Module.php(454): yii\console\Controller->runAction('load', Array) 10 C:\php-projects\ais\vendor\yiisoft\yii2\console\Application.php(167): yii\base\Module->runAction('fixture/load', Array) 11 C:\php-projects\ais\vendor\yiisoft\yii2\console\Application.php(143): yii\console\Application->runAction('fixture/load', Array) 12 C:\php-projects\ais\vendor\yiisoft\yii2\base\Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request)) 13 C:\php-projects\ais\tests\codeception\bin\yii(22): yii\base\Application->run() 14 {main}
Как загрузить фикстуру? Тестовая база данных существует, имена источников данных настроены.

Спасибо.
--
С уважением, Алексей.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как загрузить фикстуру?

Сообщение ElisDN »

В модели метод tableName() как прописан?
Aleksey Bykov
Сообщения: 14
Зарегистрирован: 2016.06.10, 07:57

Re: Как загрузить фикстуру?

Сообщение Aleksey Bykov »

Здравствуйте, ElisDN.

Прописан так:

Код: Выделить всё

    public static function tableName()
    {
        return '{{%identitydocument}}';
    }
 
Собственно, вот модель целиком:

Код: Выделить всё

<?php

namespace backend\modules\persons\models;

use Yii;
use backend\modules\persons\Module;

/**
 * This is the model class for table "{{%identitydocument}}".
 *
 * @property integer $ID
 * @property string $Name
 * @property integer $FISID
 */
class IdentityDocument extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%identitydocument}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['Name'], 'required'],
            [['Name'], 'string'],
            [['FISID'], 'integer']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ID' => Module::t('ML', 'ID'),
            'Name' => Module::t('ML', 'Name'),
            'FISID' => Module::t('ML', 'FISID'),
        ];
    }
}
 
Вот таблица:

Код: Выделить всё

CREATE TABLE [dbo].[tbl_identitydocument](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](100) NOT NULL,
    [FISID] [int] NULL,
 CONSTRAINT [PK_tbl_identitydocument] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
Aleksey Bykov
Сообщения: 14
Зарегистрирован: 2016.06.10, 07:57

Re: Как загрузить фикстуру?

Сообщение Aleksey Bykov »

Кстати вот - в классе InitDbFixture определено свойство public $initScript = '@app/tests/fixtures/initdb.php'; при этом самого файла initdb.php нет. Может- ли это быть причиной исключения? И если таблицы с префиксами, то как именовать фикстуры?..
Ответить