Я пытаюсь реализовать адаптер, использующий объект модели 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 использовать его?