【发布时间】:2013-11-28 07:13:23
【问题描述】:
我正在为我的 CodeIgniter 应用程序创建测试用例。但是我刚刚发现了一些我认为不应该发生的事情:
在 login.php 控制器中:
public function logout()
{
$this->session->sess_destroy();
redirect('/');
}
所以我刚刚创建了一个测试来确保会话真的被破坏了:
public function test_logout()
{
$this->CI = set_controller('login');
// make sure that all session is destroyed
$this->CI->session->set_userdata('test_session', 'some_value');
$this->CI->logout();
// userdata 'test_session' should be removed!
$this->assertTrue(($this->CI->session->userdata('test_session')==null || $this->CI->session->userdata('test_session')==''));
}
但是我发现在运行测试用例时,我的测试用例失败了!在测试用例的最后一行调试时,我发现 userdata 仍然存在 value = 'some_value'。我认为 sess_destroy 也应该按照他们在website documentation 中描述的内容删除所有设置的用户数据:
这个函数应该是最后一个被调用的,甚至 flash 变量也将不再可用。如果您只想销毁某些项目而不是全部,请使用 unset_userdata()。
我正在使用 Kenji 的 CIUnit 进行单元测试。 这是正确的行为还是我错过了什么?
【问题讨论】:
-
你也可以使用'unset_userdata()'函数!
-
是的,但是如果开发者不断添加新的会话名称,调用就会很多,或者不得不调用 all_userdata() 什么的。
-
我很难理解你的工作流程,你是如何测试它的......在调用“注销”之后,你应该被重定向。请记住,cookie 中的会话是数据库中的会话,可能存在于不同的时间。
-
从注销功能重定向后,应该无法调用 assertTrue 行
-
在 CIUnit 测试用例中可以。
标签: codeigniter