2012-02-12 104 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列条件的值。这不是你的看法吗?

相关问题