2011-09-21 10 views
7

मैं एक टेस्ट से कुछ सत्र चर (डीजेगो टेस्टकेस)Django में टेस्टकेस में सत्र का उपयोग कैसे करें?

इसे साफ तरीके से कैसे करें?

def test_add_docs(self): 
    """ 
    Test add docs 
    """ 
    # I would access to the session here: 
    self.request.session['documents_to_share_ids'] = [1] 

    response = self.client.get(reverse(self.document_add_view_id, args=[1]), follow=True) 
    self.assertEquals(response.status_code, 200) 
+0

...? कृपया कुछ उदाहरण कृपया। –

उत्तर

11

दुर्भाग्य से, यह एक आसान नहीं है क्योंकि आप इस समय के लिए आशा करेंगे। जैसा कि आपने देखा होगा, बस self.client.session का उपयोग सीधे काम नहीं करेगा यदि आपने अन्य विचार नहीं बुलाए हैं जो आपके लिए उचित सत्र कुकीज़ के साथ सत्र स्थापित कर चुके हैं। सत्र स्टोर/कुकी को मैन्युअल रूप से सेट किया जाना चाहिए, या अन्य विचारों के माध्यम से।

वहाँ परीक्षण ग्राहक के साथ यह नकली सत्र के लिए आसान बनाने के लिए एक खुली टिकट है: https://code.djangoproject.com/ticket/10899

टिकट में समाधान के अलावा, वहाँ एक चाल है कि अगर आप django.contrib.auth उपयोग कर रहे हैं इस्तेमाल किया जा सकता है। परीक्षण क्लाइंट login() विधि एक सत्र स्टोर/कुकी सेट अप करती है जिसे बाद में परीक्षण में उपयोग किया जा सकता है।

यदि आपके पास सत्र सेट करने वाले कोई अन्य विचार हैं, तो उनसे अनुरोध करने से यह चाल भी होगी (आपके पास शायद एक और दृश्य है जो सत्र सेट करता है, अन्यथा सत्रों को पढ़ने वाले आपके विचार बहुत अनुपयोगी होंगे)।

from django.test import TestCase 
from django.contrib.auth.models import User 

class YourTest(TestCase): 
    def test_add_docs(self): 
     # If you already have another user, you might want to use it instead 
     User.objects.create_superuser('admin', '[email protected]', 'admin') 

     # self.client.login sets up self.client.session to be usable 
     self.client.login(username='admin', password='admin') 

     session = self.client.session 
     session['documents_to_share_ids'] = [1] 
     session.save() 

     response = self.client.get('/') # request.session['documents_to_share_ids'] will be available 
+4

बस सभी को एक नोट: self.client.session को एक चर के लिए असाइन किया जाना है। –

+0

ध्यान दें कि https://code.djangoproject.com/ticket/10899 बंद था ("wontfix")। – Derek

0

आप एक Client के सत्र में अपनी session संपत्ति के माध्यम से variales उपयोग करने में सक्षम होना चाहिए, इसलिए मैं self.client.session['documents_to_share_ids'] = [1] अनुमान होना चाहिए कि आप क्या ढूंढ रहे हैं!

8

Django 1.7+ के रूप में यह बहुत आसान है। सुनिश्चित करें कि आप सत्र को सीधे संदर्भित करने के बजाय एक चर के रूप में सेट करें।

def test_something(self): 
    session = self.client.session 
    session['somekey'] = 'test' 
    session.save() 

एंड्रेस्पेलमे का वर्कअराउंड केवल डीजेंगो के पुराने संस्करणों में आवश्यक है। देखें docs

0

आप परीक्षण में अनुरोध के लिए एक सत्र प्रारंभ करने में यह सीधे हेरफेर करने के लिए की जरूरत है:

from django.contrib.sessions.middleware import SessionMiddleware 
from django.http import HttpRequest 


request = HttpRequest() 

middleware = SessionMiddleware() 
middleware.process_request(request) 

request.session.save() 
संबंधित मुद्दे