2010-11-23 46 views
4

我用三個應用程序創建了一個小型django項目,現在我正在爲其中一個應用程序編寫測試。我需要在不同的視圖和不同的模板之間傳遞一些信息,但該信息不應該對用戶可見。我的第一個嘗試是將這些信息作爲隱藏字段傳遞給HTML表單,但之後我指出,這並沒有使其完全隱藏。所以,我將這些信息存儲在request.session字典中,並且它沒有問題。在測試中使用django中的會話對象嗎?

這就是說,我的問題出現在測試中。根據django文檔(http://docs.djangoproject.com/en/1.2/topics/testing/),當您在測試過程中必須修改會話字典時,您應該先將它存儲在一個變量中,修改它,然後保存變量。

所以我的測試代碼是這樣的:

class Test_Atacar(TestCase): 
    fixtures = ["testBase.json"] 

    def test_attack_without_troops(self): 
     red_player = Player.objects.get(color=RED) 
     self.failUnless(red_player != None) 
     session = self.client.session 
     session["player_id"] = red_player.id 
     session.save() 
     response = self.client.get("/espectador/sadfxc/", follow=True) 

但是當我運行了Python manage.py測試,我得到一個AttributeError,說是字典,有保存無屬性()。 我在其他地方閱讀(http://code.djangoproject.com/ticket/11475),我應該嘗試對任何其他URL執行self.client.get之前操縱會話,以便它將成爲一個「真正」的會話,但我一直得到相同的AttributeError。

回答

2

時,你必須修改會話字典測試,你應該首先將其存儲在一個變量中,修改它,然後再保存該變量

這行的意思是,如果你想做出一些改變成一些的會話變量,不要直接進入會話。將數據存儲在變量中,對該變量進行更改,然後將該變量放入會話字典中。會話就像任何其他字典。

+0

session.save()不是必需的,並且是無效的。 – 2010-11-23 04:28:01

0

@anand我知道這很奇怪,但它的工作。我不得不做的工作,除了不直接操縱變量是做一個self.client.get(「/啞/」)其中dummy是一個使用虛擬視圖的URL。該視圖僅修改它作爲參數獲取的請求的屬性。老實說,我不知道幕後發生了什麼,使這項工作