2012-02-12 16 views
7

He estado probando mi aplicación y me he quedado atrapado en un error que no parece tener nada que ver con la aplicación. Tengo una prueba de unidad de la siguiente manera:TypeError: el argumento int() debe ser una cadena o un número, no 'Usuario anónimo' en 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) 

El error que consigo es: TypeError: int() argument must be a string or a number, not 'AnonymousUser'. Los archivos que aparecen en el rastreo son base.py, manages.py, query.py, etc. Parece que mi solicitud se queda atascada en algún lugar del middleware, y no tengo ni idea de cómo manejarlo. ¿Cómo es posible que la solicitud no llegue a mi vista o incluso al controlador? ¿Por qué hay un problema con AnonymousUser si la función 'setUp()' registra un usuario de prueba?

rastreo completo se puede encontrar here, gracias de antemano!

Respuesta

4

Trate de no dejarse intimidar por la trazabilidad. La información que necesitas está allí, si miras lo suficientemente alto más allá de todas las partes internas de Django. La solicitud está llegando a su punto de vista, el problema no está en el middleware. Parece que la llamada client.login no funciona. La siguiente instrucción de filtro falla porque es un request.user un usuario anónimo

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

intente imprimir la línea CLIENT.LOGIN en su prueba. Devolverá True si registra correctamente al usuario. Si eso no funciona, entonces marque:

  1. Está utilizando el nombre de usuario y la contraseña correctos para sus dispositivos.
  2. Está cargando los accesorios del usuario con éxito. ¿Tienes el nombre de archivo correcto? La convención de Django es user.json sin una s.
  3. Asegúrese de que su clase de prueba subclasifique la clase Django TestCase para que los dispositivos estén cargados.
2

El problema está en esta línea de código:

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

Estás pasando un objeto de usuario como el valor de una columna condición en el ORM. ¿No es esta tu opinión?

Cuestiones relacionadas