2010-05-10 184 views
3

這是在我的項目一個簡單的結構:我該怎麼做這樣一個典型的單元測試?

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 

我想打一個單元測試,可以測試noteshow頁面propeyly或不工作。

代碼:

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') 

的問題是,我的項目包括一個auth國防部,它會迫使unlogin用戶重定向到login.html的頁面,當他們參觀noteshow.html。

所以,當我跑我的單元測試,在Bash它引發故障的response.status_code始終是302而不是200

雖然所有權利,通過這個結果我可以檢查AUTH國防部運行良好,它不像我想要的那樣。

好的,問題是我如何使另一個單元測試來檢查我的noteshow.template是否被使用?

謝謝大家。

Django的版本:1.1.1

Python版本:2.6.4

使用Eclipse進行MAC OS

回答

6

只需登錄每個測試的用戶。最好的方法是使用創建客戶端,創建用戶,然後將用戶登錄到的setUp()方法。還可以使用tearDown()方法執行相反操作(註銷用戶並刪除用戶)。

方法setUp()tearDown()自動爲該組測試中的每個測試運行。

這將是這個樣子:

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') 

希望這有助於。

+0

非常感謝。這真的很有幫助! – 2010-05-17 01:04:27