2012-02-12 11 views
7

Ho testato la mia applicazione e sono rimasto bloccato in errore che non sembra avere nulla a che fare con l'applicazione stessa. Ho una prova di unità in questo modo:TypeError: l'argomento int() deve essere una stringa o un numero, non "AnonymousUser" in 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'errore che ottengo è: TypeError: int() argument must be a string or a number, not 'AnonymousUser'. I file che appaiono nel traceback sono base.py, manages.py, query.py, ecc. Sembra che la mia richiesta resti bloccata da qualche parte nel middleware e non ho idea di come gestirla. Com'è possibile che la richiesta non raggiunga il mio punto di vista o anche il controller? Perché c'è un problema con AnonymousUser se la funzione 'setUp()' registra un utente di prova?

Tracciamento completo può essere trovato here, grazie in anticipo!

risposta

4

Cerca di non essere troppo intimidito dal traceback. Le informazioni di cui hai bisogno sono lì, se guardi abbastanza in alto oltre tutti gli interni di Django. La richiesta sta raggiungendo la tua vista, il problema non è nel middleware. Sembra che la chiamata a client.login non funzioni. La seguente dichiarazione del filtro non riesce a causa request.user è un utente ospite

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

provare a stampare la linea client.login nel test. Verrà restituito True se si registra correttamente l'utente. Se ciò non funziona, controllare:

  1. Si sta utilizzando il nome utente e la password corretti per i dispositivi.
  2. Si stanno caricando i dispositivi utente con successo. Hai il nome file corretto? La convenzione Django è user.json senza s.
  3. Assicurarsi che la classe di test sottoclassi la classe Django TestCase in modo che i dispositivi siano stati caricati.
2

Il problema è in questa riga di codice:

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

Stai passando un oggetto utente, come il valore di una condizione di colonna nel ORM. Non è questa la tua opinione?

Problemi correlati