Как я могу проверить модель Yii2 в проекте библиотеки? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь реализовать адаптер, использующий объект модели Yii с расширением yii\db\ActiveRecord. Объект передается как конструктор arg классу адаптера.

Моя проблема в том, что я до сих пор не могу понять, как заставить это работать должным образом. Я даже пытался насмехаться над ним, но застрял, потому что Yii использует множество статических методов для получения объектов. Конечно, теперь я мог бы попытаться издеваться над ними ... Но должен быть лучший способ?

public function testSuccessFullFind(): void
{
    $connection = (new Connection([
            'dsn' => 'sqlite:test'
        ]))
        ->open();

    $queryBuilder = new \yii\db\sqlite\QueryBuilder($connection);

    $app = $this->createMock(Application::class);
    \Yii::$app = $app;

    $app->expects($this->any())
        ->method('getDb')
        ->willReturn($this->returnValue($connection));

    $userModel = new UserModel();
    $resovler = new Yii2Resolver($userModel);
    $result = $resolver->find(['username' => 'test', 'password' => 'test']);
    // TBD asserts for the result
}

UserModel используется для внутреннего поиска пользовательской записи.

В результате:

1) Authentication\Test\Identifier\Resolver\Yii2ResolverTest::testSuccessFullFind
Error: Call to a member function getDb() on null

vendor\yiisoft\yii2-dev\framework\db\ActiveRecord.php:135
vendor\yiisoft\yii2-dev\framework\db\ActiveQuery.php:312
vendor\yiisoft\yii2-dev\framework\db\Query.php:237
vendor\yiisoft\yii2-dev\framework\db\ActiveQuery.php:133
tests\TestCase\Identifier\Resolver\Yii2ResolverTest.php:31

Код выше, очевидно, WIP тестового примера.

Так как я могу настроить тестовое соединение и заставить мой объект ActiveRecord использовать его?

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете передать соединение в качестве аргумента all() метод:

$results = UserModel::find()->where(['id' => 1])->all($connection);
...