Ho una funzione che chiamo da un unittest. Dall'impostazione di alcune tracce di debug, so che la funzione ha funzionato come un incantesimo e ha tutti i valori correttamente preparati per il ritorno.Posso accedere al contesto di risposta di una vista testata senza il client di prova?
Questo è ciò che il mio testcode assomiglia (vedere dove la mia ipdb.set_trace() è):
@override_settings(REGISTRATION_OPEN=True)
def test_confirm_account(self):
""" view that let's a user confirm account creation and username
when loggin in with social_auth """
request = self.factory.get('')
request.user = AnonymousUser()
request.session={}
request.session.update({self.pipename:{'backend':'facebook',
'kwargs':{'username':'Chuck Norris','response':{'id':1}}}})
# this is the function of which i need the context:
response = confirm_account(request)
self.assertEqual(response.context['keytotest'],'valuetotest')
Da quello che so da this part of the Django docs, sarei in grado di accedere response.context quando ho usato il client di test. Ma quando provo ad accedere response.context come ho fatto, ottengo questo:
AttributeError: 'HttpResponse' object has no attribute 'context'
C'è un modo per ottenere l'oggetto HttpResponse speciale del cliente, senza utilizzare il client?
Chiamarlo tramite il client di test non mi dà il pieno controllo sulla composizione della richiesta. Ho chiesto esplicitamente se è possibile senza il client. – marue
Sto manipolando la sessione usando il client integrato nei miei test (guarda client.session). È quello che chiami controllo di contruction di richiesta? Se è così, riconsidera il tuo downvote. – starenka
No, non lo è. Una sessione è informazioni su un determinato utente memorizzato sul lato server, la richiesta è ciò che un client invia al server per richiedere una risposta del server. Il contesto di risposta (che stavo chiedendo) viene utilizzato solo per i test e contiene informazioni su come il server ha creato la risposta (ad esempio quali modelli sono stati utilizzati). Non è uguale al contesto della richiesta e non è uguale alla sessione. – marue