2010-05-10 16 views
3

est une structure simple dans mon projet:Comment puis-je faire un tel unittest typique? Ce

MyAPP--- 
     note--- 
       __init__.py 
       views.py 
       urls.py 
       test.py 
       models.py 
     auth-- 
       ... 
     template--- 
        auth--- 
          login.html 
          register.html 
        note--- 
          noteshow.html 
        media--- 
          css--- 
           ... 
          js--- 
           ... 
     settings.py 
     urls.py 
     __init__.py 
     manage.py 

Je veux faire un unittest qui permet de tester la page noteshow travail propeyly ou non.

Le code:

from django.test import TestCase 

class Note(TestCase): 
    def test_noteshow(self): 
     response = self.client.get('/note/') 
     self.assertEqual(response.status_code, 200) 
     self.assertTemplateUsed(response, '/note/noteshow.html') 

Le problème est que mon projet comprend un mod auth, il forcera l'utilisateur unlogin rediriger dans la page login.html quand ils visitent le noteshow.html.

Alors, quand je lance mon unittest, dans le bash, il soulève un échec que le response.status_code est toujours 302 au lieu de 200.

bien que grâce à ce résultat, je peux vérifier le mod auth fonctionne bien , ce n'est pas comme ce que je veux que ce soit. OK, la question est: comment puis-je faire un autre test pour vérifier si mon modèle noteshow.template est utilisé ou non?

Merci pour tout.

version django: 1.1.1

version python: 2.6.4

Utiliser Eclipse pour MAC OS

Répondre

6

vous connecter juste un utilisateur pour chaque test. Le meilleur moyen d'y parvenir est d'utiliser une méthode setUp() qui crée un client, crée un utilisateur, puis connecte l'utilisateur. Utilisez également une méthode tearDown() qui inverse (déconnecte l'utilisateur et supprime l'utilisateur).

Les méthodes setUp() et tearDown() sont exécutées automatiquement pour chaque test de l'ensemble de tests.

Il ressemblerait à quelque chose comme ceci:

class Note(TestCase): 
    def setUp(self): 
     self.client = Client() 
     self.new_user = User.objects.create_user('blah', '[email protected]', 'blah') 
     self.new_user.save() 
     self.client.login(username='blah', password='blah') 

    def tearDown(self): 
     self.client.logout() 
     self.new_user.delete() 

    def test_noteshow(self): 
     response = self.client.get('/note/') 
     self.assertEqual(response.status_code, 200) 
     self.assertTemplateUsed(response, '/note/noteshow.html') 

Hope this helps.

+0

Merci beaucoup. Cela est vraiment utile! –