1

我成立了一個單元測試這樣:獲取用戶登錄時所用的Django社會AUTH

class UserViewTests(TestCase): 
    def setUp(self): 
     self.user_passwords = '123456' 
     self.user1 = User.objects.create(username='Bobby Johnson', password=self.user_passwords) 

    ... 

    def test_view_user(self): 
     """ 
     Check that you can view a user's information correctly in their profile 
     """ 
     response = self.client.get(reverse('login')) 
     self.assertContains(response, "You're not logged in yet", status_code=200) 
     self.client.login(username=self.user1.username, password=self.user_passwords) 
     response = self.client.get(reverse('login')) 
     self.assertContains(response, "You've logged in already", status_code=200) 

只有最後一個斷言失敗,並用「你代替「你已經登錄已經」尚未登錄「的最後斷言使測試通過,所以它出現我的登錄失敗。我猜這是因爲我使用django-social-auth來允許OpenId登錄。

如何以某種方式獲得單元測試認爲我的用戶已登錄,因此user.is_authenticated是真的?我只想測試用戶登錄時我的視圖能夠正確顯示,而不是特別關心登錄實際工作的單元測試。

回答

1
self.user1 = User.objects.create(username='Bobby Johnson', password=self.user_passwords) 

應該是:

self.user1 = User.objects.create_user(username='Bobby Johnson', password=self.user_passwords) 

否則密碼進行散列處理而無法使用。


您還需要有django.contrib.auth.backends.ModelBackend存在於您的身份驗證後端中。


然後,

self.client.login(username=self.user1.username, password=self.user_passwords) 

只是工作