2014-03-05 89 views
1

對於如何測試需要登錄的頁面,我感到非常困惑。在我的回覆中,我一直得到302而不是200,並且在檢查pdb中的響應時,我肯定會重定向到登錄頁面。我使用登錄中間件而不是裝飾器,如果這是相關的。即使用戶已登錄,Django測試也會返回登錄重定向302

class SimplePageLoadsTestCase(TestCase): 

    def setUp(self): 
     self.client = Client() 
     self.user = User.objects.create_user('test_user') 
     self.client.login(username='test_user', password='test_user') 

    def test_login(self): 
     self.assertTrue(self.user.is_authenticated()) 

    def test_index(self): 
     self.client.login(username='test_user', password='test_user') 
     response = self.client.get(reverse('index')) 
     self.assertEqual(response.status_code, 200) 

test_login測試通過。我不確定我是否需要每次測試重新登錄用戶(我認爲不是,因爲我不需要在test_login,但我已經嘗試了兩種方式,結果相同。我扔了幾個打印在我看來聲明,他們不輸出,所以我知道我不打的看法都一樣,我懷疑。

我能提供的觀點或中間件如果他們有關。

編輯:我禁用了中間件,並用@login_required修飾器替換了它,並且出現了相同的問題。

再次編輯:我檢查了一下,我拿出了所有的登錄檢查,一切正常(正如我預期的那樣) m幾乎肯定了self.client沒有知道我已經登錄。

回答

2

它看起來並不像你是creating你的用戶使用密碼。沒有提供密碼,它被認爲是cannot be logged in的用戶。提供密碼create_user應該修復它

self.client = Client() 
self.user = User.objects.create_user('test_user', password='test_user') 
self.client.login(username='test_user', password='test_user') 
+0

我會嘗試,但爲什麼test_login函數工作? – thumbtackthief

+1

文檔建議is_authenticated始終返回True,https://docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated – dm03514

+1

您是否在瘋狂地開玩笑?我一整天都在那,而且那很簡單。謝謝! – thumbtackthief

相關問題