Как в php-unit подменять методы фреймворка?
Как можно в тесте php-unit переопределить метод фреймворка Yii2 который вызван в action?
Пример:
Action:
public function actionIndex()
{
if (Yii::$app→user→getIsGuest()) {
Тест:
public function testHTML() {
Yii::configure(Yii::$app, [
'components' => [
'user' => [
'class' => 'yii\web\User',
'identityClass' => 'app\models\User',
]
],
]);
// Здесь подменить функцию Yii::$app→user→getIsGuest() так, чтобы она всегда возвращала true
Yii::$app->controller = new IndexController('index', Yii::$app);
$result = Yii::$app->controller->run('index', []);
$this->assertInternalType('string', $result);
}
Ответы (1 шт):
Автор решения: fedornabilkin
→ Ссылка
Только сначала надо создать объект, в котором будет переопределен метод, а потом его уже использовать. Для этого объект необходимо получать из контейнера.
Создаем объект, в котором переопределяем, необходимые методы и свойства.
$container = new \yii\di\Container;
$container->set('user', function ($container, $params, $config) {
return new class () extends User
{
public function getIsGuest()
{
return true;
}
};
});
// далее тест
Подробнее в документации внедрение зависимостей