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ページが正常に動作するかどうかをテストできる単体テストを作成したいと思います。

コード:

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 mod が含まれていることです。これにより、ログインしていないユーザーが noteshow.html にアクセスしたときに、login.html ページに強制的にリダイレクトされます。

そのため、単体テストを実行すると、bash で response.status_code が常に 200 ではなく 302 であるというエラーが発生します。

この結果から、auth mod が正常に動作していることを確認できますが、私が望んでいるものとは異なります。

OK、問題は、noteshow.template が使用されているかどうかを確認するために別の単体テストを作成するにはどうすればよいかということです。

全てに感謝。

ジャンゴのバージョン: 1.1.1

Python バージョン: 2.6.4

MAC OS に Eclipse を使用する

4

1 に答える 1

6

テストごとにユーザーをログインするだけです。これを行う最善の方法setUp()は、クライアントを作成し、ユーザーを作成してtearDown()からユーザーをログインさせる方法を使用することです。また、逆の方法 (ユーザーをログアウトしてユーザーを削除する) を使用することもできます。

メソッドsetUp()とメソッドtearDown()は、一連のテストの各テストに対して自動的に実行されます。

次のようになります。

class Note(TestCase):
    def setUp(self):
        self.client = Client()
        self.new_user = User.objects.create_user('blah', 'blah@blah.com', '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')

お役に立てれば。

于 2010-05-10T04:25:49.583 に答える