2012-02-12 142 views
7

我一直在測試我的應用程序,並陷入了與應用程序本身沒有任何關係的錯誤。我有這樣一個單元測試:TypeError:int()參數必須是字符串或數字,而不是Django中的'AnonymousUser'

class TagSaveAndLoadTest(TestCase): 
    fixtures = ['users.json'] 

    def setUp(self): 
     self.client = Client() 
     self.client.login(user='test_user', password='123') 

    def test_register_save(self): 
     tag_dict = { 
         'sex' : 4, 
         'drugs' : 3, 
         'rocknroll' : 1, 
        } 
     response = self.client.post('/register/save_tags/', {'skilltags' : json.dumps(tag_dict)}) 
     self.assertEqual(response.status_code, 200) 

我得到的錯誤是:TypeError: int() argument must be a string or a number, not 'AnonymousUser'。出現在回溯中的文件有base.py,manages.py,query.py等。看起來我的請求被卡在中間件的某處,我不知道如何處理它。請求不可能到達我的視圖甚至控制器,甚至有可能?如果'setUp()'函數記錄測試用戶,爲什麼AnonymousUser存在問題?

完整的追溯可以發現here,在此先感謝!

回答

4

儘量不要被回溯嚇倒。你需要的信息就在那裏,如果你經過所有的Django內部查找足夠高的信息。請求正在達到您的看法,問題不在中間件中。它看起來像client.login調用不起作用。以下過濾器語句失敗,因爲request.user是匿名用戶

Skill.objects.filter(user=request.user).delete() 

嘗試在您的測試中打印client.login行。如果成功登錄用戶,它將返回True。如果不起作用,則檢查:

  1. 您正在爲您的燈具使用正確的用戶名和密碼。
  2. 您正在成功加載用戶裝置。你有正確的文件名嗎? Django約定是沒有s的user.json。
  3. 確保您的測試類是Django TestCase類的子類,以便裝入燈具。
2

的問題是在這行代碼:

File "E:\ev\site\project\..\project\jobs\views.py", line 69, in post 
    Skill.objects.filter(user=request.user).delete() 

你傳遞一個用戶對象爲在ORM列條件的值。這不是你的看法嗎?

相關問題