PHPUnit测试中Yii2中的模拟视图助手

问题描述 投票:0回答:1

我想在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以避免此错误?

php yii yii2 mocking phpunit
1个回答
0
投票

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');

尽管这是非常不切实际的,因为您将需要在许多地方重复相同的路线。

© www.soinside.com 2019 - 2024. All rights reserved.