Django: test failing on a view with @login_required

后端 未结 3 1874
梦谈多话
梦谈多话 2020-12-13 20:56

I\'m trying to build a test for a view that\'s decorated with @login_required, since I failed to make it work, I did a simple test and still can\'t make it pass.

Her

相关标签:
3条回答
  • 2020-12-13 21:35

    Here is the answer:

    Python 2.6.5 made a change to the way cookies are stored which is subtly incompatible with the test client. This problem has been fixed in the 1.1.X and trunk branches, but the fix hasn't yet made it into a formal release.

    If you are using 1.1.X and Python 2.6.5, you're going to have problems with any test activity involving cookies. You either need to downgrade Python, or use the 1.1.X branch rather than the 1.1.1 release.

    A 1.1.2 release (that will include the fix for the problem you describe) will be made at the same time that we release 1.2 - hopefully, very very soon.

    Yours, Russ Magee %-)

    http://groups.google.com/group/django-users/browse_frm/thread/617457f5d62366ae/05f0c01fff0b9e6d?hl=en&lnk=gst&q=2.6.5#05f0c01fff0b9e6d

    0 讨论(0)
  • 2020-12-13 21:36

    OK I was to facing same problem @resto solved my problem.

    creating user this way below, lets the test client get the user logged in and get the response other than redirect (302)

    self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
    
    0 讨论(0)
  • 2020-12-13 21:37

    This testcase works for me:

    from django.contrib.auth.models import User
    from django.core.urlresolvers import reverse
    from django.test.client import Client
    import unittest
    
    class LoginTestCase(unittest.TestCase):
        def setUp(self):
            self.client = Client()
            self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
    
        def testLogin(self):
            self.client.login(username='john', password='johnpassword')
            response = self.client.get(reverse('testlogin-view'))
            self.assertEqual(response.status_code, 200)
    

    I suggest you (if you don't use them already) to use the reverse() function and name your URLs. This way you are sure that you get always the right URL.

    0 讨论(0)
提交回复
热议问题