Ho iniziato a utilizzare il framework di test di Django e tutto funzionava fino a quando ho iniziato a testare le pagine autenticate.login() nel framework di test di Django
Per semplicità, diciamo che questa è una prova:
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]')
Dopo ho eseguito questo test, non riesce, e vedo che la stampa di valore di ritorno di login() restituisce vero, ma response.content viene reindirizzato alla pagina di accesso (se l'accesso fallisce l'autenticazione decorator reindirizza alla pagina di accesso). Ho messo un punto di interruzione nel decoratore che fa l'autenticazione:
def authenticate(user):
if user.is_authenticated():
return True
return False
e in realtà restituisce False. La riga 4 in test_secure_page() recupera correttamente l'utente.
Questa è la funzione di visualizzazione:
@user_passes_test(authenticate, login_url='/users/login')
def secure(request):
user = request.user
return render_to_response('secure.html', {'email': user.email})
Naturalmente, se provo ad entrare attraverso l'applicazione (al di fuori di prova), tutto funziona bene.
E per favore pubblica il codice della vista che stai testando. –
@ S.Lott Non stavo testando la mia pagina di accesso (anche se ho provato anche quello, ma non funziona neanche), ma il resto della parte "sicura" del sistema. Per questo motivo, ho provato ad usare login(). – kevin
@kevin. Il problema è che il post di accesso crea un cookie che viene poi utilizzato dal client. Nessun cookie, nessun accesso sicuro. AFAIK, la funzione 'login()' non crea il cookie e lo restituisce al client. Puoi provare a riprodurre gli esempi nella documentazione di Django e vedere se funzionano per te? –