Yii 使用登录的 Web 用户进行单元测试


Yii Unit-Testing with a Logged in Web User

我正在编写一些单元测试,请耐心等待,我对单元测试仍然很陌生。

我遇到的问题是我的很多保存都调用了需要的行为
来自Yii::app()->user->id的用户 ID。

但是,当我运行单元测试时,我遇到了问题,因为用户没有登录。

无论如何,我可以通过标志忽略行为(例如 if ($isInTestingMode) ) 还是在测试类中登录用户?

我可能会构建一个您在测试中使用的用户对象。 然后在适当的测试中(作为 setup 方法的一部分,如 ernie 在他的评论中描述的那样),交换测试用户对象。

然后,测试用户对象将具有如下所示的方法:

public function getId() {
    return 12;
}
public function getIsGuest() {
    return false;
}

以上就是他们所说的"假"对象。

在设置方法中,应使用以下行:

Yii::app()->configure(array(
    'components' => array(
        'user' => array(
            'class' => 'path.to.FakeUser',
        )
    )
));

如果您希望它成为默认用户,也可以将其添加到测试配置文件中(然后在需要非登录用户的测试中交换普通CWebUser/WebUser模型。

或者你可以在每个单元测试中为你的假用户设置一个标志(isLoggedIn = true/false)。 我可能会自己选择这个选项...

像这样的测试不是单元测试。单元测试用于测试类中的各个函数。"登录用户"涵盖了大量代码(登录、会话管理、导航到特定页面等)。我相信您正在寻找功能测试。您可以在此处了解更多信息:http://www.yiiframework.com/doc/guide/1.1/en/test.functional