2011-07-07 60 views
2

在我的單元測試中,我需要在會話中添加一個變量,因爲該變量在正在測試的視圖中使用。 Django的文件說,這是可能通過以下方式(https://docs.djangoproject.com/en/1.3/topics/testing/#django.test.client.Client.session):Django單元測試在會話中添加一個變量

def test_something(self): 
    session = self.client.session 
    session['somekey'] = 'test' 
    session.save() 

此代碼示例實際上是行不通的,因爲你會得到錯誤的字典不具有的功能保存。我還嘗試了各種其他方式來改變會話內部的內容,但還沒有找到改變它的方法。 我知道它是什麼意思,我回來的是一個字典對象,所以它沒有保存功能。但會話字典在添加密鑰時也不會更新。

使用self.client.session時的文檔狀態應該返回一個SessionStore對象而不是一個字典。

+0

你使用'unittest'或'django.utils.unittest'嗎? – Gabriel

+0

django.utils.unittest –

+0

爲什麼你需要保存它?你在哪裏檢查其他地方的會議? –

回答

0

似乎現在在Django中有一個錯誤,所以它不適用於未經身份驗證的用戶更改會話。這是相應的票:https://code.djangoproject.com/ticket/11475

解決方法是創建一個虛擬視圖,其中設置會話變量並使用Client.get('url_of_dummy_view')調用該視圖。

0

@Sam Stoelinga引用的票已作爲副本關閉。相應的票據可以在here找到。

要保存會話數據,您必須使用經過身份驗證的用戶。我找到了一個解決方案here

class BlogAdminTestCase(TestCase): 
    def setUp(self): 
     # Setup Test User 
     User.objects.create_user(
      username='foo', 
      password='bar' 
     ) 

     # Must login to modify session variables 
     self.client.login(username='foo', password='bar') 

     s = self.client.session 
     s['my_session_variable'] = 'Yay!' 
     s.save()