マイビューファイルがあります:テスト@user_passes_testデコレータを使用してリダイレクト
:def is_authorised(user):
return user.groups.filter(name='bookkeepers').exists()
@login_required
def unauthorised(request):
context = {'user': request.user}
return render(request, 'order_book/unauthorised.html', context)
@login_required
@user_passes_test(is_authorised,
login_url='/order_book/unauthorised/',
redirect_field_name=None)
def book(request):
return render(request, 'order_book/book.html', {})
は、私がこれまでのところ、私はこれを持って、正しくリダイレクトさん許可されていないユーザーでログインしていることを主張するテストを書きたいです
class RestrictedViewsTest(TestCase):
@classmethod
def setUpTestData(cls): # noqa
"""Set up data for the whole TestCase."""
User.objects.create_user(username='JaneDoe',
email='[email protected]',
password='s3kr3t')
def setUp(self):
auth = self.client.login(username='JaneDoe', password='s3kr3t')
self.assertTrue(auth)
def test_book(self):
response = self.client.get('/order_book/book')
self.assertEqual(response.status_code, 301, response)
self.assertTrue(isinstance(response, HttpResponsePermanentRedirect))
def tearDown(self):
self.client.logout()
これは問題なく動作しますが、どこにURLをリダイレクトするかはわかりません。 response['Location']
を取得しようとすると、私に「/ order_book/book」が届きません。
私は間違っていますか?
あなたは 'self.client.get(「/ order_book /書籍/」)'内のURLの最後に不足しているスラッシュを追加した場合、私は '応答[「場所」]'あなたを与えるべきだと思います'/ order_book/unauthorized /'を使用してください。しかし、私はあなたの答えで 'assertRedirects'メソッドを使うことをお勧めします。 – Alasdair
@Alasdair入力ミスが修正されるとすぐに、リダイレクトコードは私が予想していた302に戻ります。 – Sardathrion