Помощник по макету в Yii2 в тесте PHPUnit - PullRequest
0 голосов
/ 01 мая 2020

Я хочу проверить указанное действие контроллера c в среде Yii2. Это действие отображает файл представления, использующий помощник yii \ helpers \ Url:

Url::toRoute('page')

При вызове модульного теста этого представления у меня появляется ошибка:

yii\base\InvalidArgumentException: Unable to resolve the relative route: vendor/bin/. No active controller is available.

Тест:


<?php

use app\modules\user\controllers\UserController;

class UserControllerTest extends \PHPUnit_Framework_TestCase
{
    public function testActionIndex() {

        Yii::configure(Yii::$app, [
            'components' => [
                'user' => [
                    'class' => 'yii\web\User',
                    'identityClass' => 'app\modules\user\models\User',
                ],
                'request' => [
                    'class' => 'yii\web\Request',
                    'cookieValidationKey' => 'abc',
                ],
            ],
        ]);

        $controller = new UserController('user', Yii::$app);
        $result = $controller->run('index', []);
    }
}

Как можно смоделировать метод Url :: toRoute, чтобы избежать этой ошибки?

1 Ответ

0 голосов
/ 01 мая 2020

Url помощник использует Yii::$app->controller для разрешения относительных маршрутов. Вам нужно установить Yii::$app->controller перед вызовом своего действия:

Yii::$app->controller = new UserController('user', Yii::$app);
$result = Yii::$app->controller->run('index', []);

В качестве альтернативы вы можете избежать этой проблемы, используя абсолютные маршруты:

Url::toRoute('/mymodule/mycontroller/page');

Хотя это довольно непрактично, так как вы будете нужно повторить один и тот же маршрут во многих местах.

...