2012-02-12 58 views
7

Tôi đã thử nghiệm ứng dụng của mình và bị kẹt vào lỗi mà dường như không liên quan gì đến ứng dụng. Tôi có một bài kiểm tra đơn vị như sau:TypeError: int() đối số phải là một chuỗi hoặc một số, không phải 'AnonymousUser' trong Django

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) 

Lỗi tôi nhận được là: TypeError: int() argument must be a string or a number, not 'AnonymousUser'. Các tệp xuất hiện trên trang truy nguyên là base.py, manages.py, query.py, v.v. Có vẻ như yêu cầu của tôi bị kẹt ở đâu đó trong phần mềm trung gian và tôi không biết cách xử lý nó. Làm thế nào là nó thậm chí có thể cho yêu cầu không để đạt được quan điểm của tôi hoặc thậm chí điều khiển? Tại sao có một vấn đề với AnonymousUser nếu chức năng 'setUp()' ghi lại một người dùng thử nghiệm?

Truy xuất đầy đủ có thể được tìm thấy here, cảm ơn trước!

Trả lời

4

Cố gắng đừng quá sợ hãi bởi truy nguyên. Các thông tin bạn cần là có, nếu bạn nhìn lên đủ cao qua tất cả các nội bộ Django. Yêu cầu đang đến tầm nhìn của bạn, vấn đề không nằm trong phần mềm trung gian. Có vẻ như cuộc gọi client.login không hoạt động. Tuyên bố bộ lọc sau không thành công do request.user là một người dùng ẩn danh

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

Hãy thử in dòng khách hàng.login trong thử nghiệm của bạn. Nó sẽ trả về True nếu thành công đăng nhập người dùng. Nếu điều đó không hiệu quả, hãy kiểm tra:

  1. Bạn đang sử dụng đúng tên người dùng và mật khẩu cho đồ đạc của mình.
  2. Bạn đang tải đồ đạc người dùng thành công. Bạn có tên đúng không? Quy ước Django là user.json không có s.
  3. Đảm bảo lớp thử nghiệm của bạn phân lớp lớp Django TestCase để các đồ đạc được tải.
2

Vấn đề là ở dòng mã này:

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

Bạn đang đi qua một đối tượng người dùng như giá trị của một tình trạng cột trong ORM. Đây không phải là quan điểm của bạn?

Các vấn đề liên quan