2013-11-28 124 views
0

我正在爲我的CodeIgniter應用程序創建測試用例。但是我剛剛發現的東西,我認爲不應該發生:CodeIgniter sess_destroy不會刪除user_data會話嗎?

中的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')=='')); 

} 

但是我發現在運行測試用例時,我的測試用例失敗了!在對最後一行測試用例進行調試時,我發現用戶數據仍然存在,value ='some_value'。我認爲sess_destroy也應該刪除他們在他們的website documentation描述的所有用戶數據集,按:

這個功能應該是最後一個叫,甚至Flash變量將不再可用。如果你只想要一些項目被銷燬而不是全部,使用unset_userdata()。

我正在使用Kenji的CIUnit進行單元測試。 這是正確的行爲還是有我錯過的東西?

+0

你也可以使用'unset_userdata()'函數! – Suleman

+0

是的,但是如果開發者不斷添加新的會話名稱,那麼調用會很多,或者必須調用all_userdata()或其他東西。 – Rudy

+0

我很難理解你的工作流程,你怎麼測試它......在調用「註銷」之後,你應該被重定向。請記住,Cookie中的會話是數據庫中的會話可能存在於不同的時間。 –

回答

0

剛剛發現CIUnit將會話路由到CIU_Session而不是原始的CodeIgniter的CI_Session。它錯過行CI_Session作用:

$this->userdata = array(); 

所以原來這是CIUnit的問題,而不是CodeIgniter的。在他們的bitbucket頁面中創建an issue