7

djangoアプリのテストをいくつか書いています。私の見解では、「HttpResponseRedirect」を使用して他のURLにリダイレクトします。それをテストするにはどうすればよいですか?

4

3 に答える 3

21

DjangoTestCaseクラスには、assertRedirects使用できるメソッドがあります。

from django.test import TestCase

class MyTestCase(TestCase):

    def test_my_redirect(self): 
        """Tests that /my-url/ permanently redirects to /next-url/"""
        response = self.client.get('/my-url/')
        self.assertRedirects(response, '/next-url/', status_code=301)

ステータス コード 301 は、それが永続的なリダイレクトであることを確認します。

于 2012-07-27T09:07:05.603 に答える
15
from django.http import HttpResponsePermanentRedirect
from django.test.client import Client

class MyTestClass(unittest.TestCase):

    def test_my_method(self):

        client = Client()
        response = client.post('/some_url/')

        self.assertEqual(response.status_code, 301)
        self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
        self.assertEqual(response.META['HTTP_LOCATION'], '/url_we_expect_to_be_redirected_to/')

テストするのが興味深い応答の他の属性があります。オブジェクトに何があるか不明な場合は、いつでも実行できます。

print dir(response)

DJANGO の現在のバージョンの編集

少し簡単になりました。次のようにします。

    self.assertEqual(response.get('location'), '/url/we/expect')

とにかくアプリ内のURLである場合は、逆を使用して名前から期待するURLを検索することもお勧めします。

于 2012-07-27T07:38:04.173 に答える