我已經開始使用Django的測試框架,並且一切正常,直到我開始測試已認證的頁面。在Django測試框架中登錄()
爲了簡單起見,我們說這是一個測試:
class SimpleTest(TestCase):
def setUp(self):
user = User.objects.create_user('temporary', '[email protected]', 'temporary')
def test_secure_page(self):
c = Client()
print c.login(username='temporary', password='temporary')
response = c.get('/users/secure/', follow=True)
user = User.objects.get(username='temporary')
self.assertEqual(response.context['email'], '[email protected]')
我運行這個測試後,它失敗了,我看到打印登錄的返回值()返回真,但response.content被重定向到登錄頁面(如果登錄失敗,則認證裝飾器重定向到登錄頁面)。我已經把裝飾一個破發點,做身份驗證:
def authenticate(user):
if user.is_authenticated():
return True
return False
,它真的返回假。 test_secure_page()中的第4行正確檢索用戶。
這是視圖功能:
@user_passes_test(authenticate, login_url='/users/login')
def secure(request):
user = request.user
return render_to_response('secure.html', {'email': user.email})
當然,如果我嘗試登錄,通過應用程序(外測試),一切工作正常。
請發佈您正在測試的視圖的代碼。 –
@ S.Lott我沒有測試我的登錄頁面(儘管我也嘗試過,但這也不起作用),但其餘部分是系統的「安全」部分。出於這個原因,我嘗試使用login()。 – kevin
@kevin。問題是登錄帖子會創建一個客戶端使用的cookie。沒有cookie,沒有安全訪問。 AFAIK,'login()'函數不會創建cookie並將其返回給客戶端。你可以嘗試重現Django文檔中的例子,看看它們是否適合你? –