Django测试返回登录重定向302,即使用户已登录

时间:2014-03-05 20:45:17

标签: python django testing

我对如何测试需要登录的页面感到非常困惑。我在响应中不断获得302而不是200,并且在检查pdb中的响应时,我肯定会重定向到登录页面。我正在使用登录中间件而不是装饰器,如果这是相关的。

class SimplePageLoadsTestCase(TestCase):

    def setUp(self):
        self.client = Client()
        self.user = User.objects.create_user('test_user')
        self.client.login(username='test_user', password='test_user')

    def test_login(self):
        self.assertTrue(self.user.is_authenticated())

    def test_index(self):
        self.client.login(username='test_user', password='test_user')
        response = self.client.get(reverse('index'))
        self.assertEqual(response.status_code, 200)

test_login测试通过。我不确定我是否需要每次测试重新登录用户(我想不是,因为我在test_login中不需要,但我已经尝试了两种方式,结果相同。我在我的视图中抛出了一些打印语句,并且它们没有输出,所以我知道我根本没有看到视图,就像我怀疑的那样。

如果它们相关,我可以提供视图或中间件。

编辑:我禁用了中间件并将其替换为@login_required装饰器,并遇到了同样的问题。

再次编辑:为了检查,我拿出了所有登录检查,一切正常(正如我所料)。所以我几乎肯定self.client不知道我已经登录了。

1 个答案:

答案 0 :(得分:2)

您的用户使用密码看起来不像creating。如果不提供密码,则会将用户视为cannot be logged in。为create_user提供密码应该修复

self.client = Client()
self.user = User.objects.create_user('test_user', password='test_user')
self.client.login(username='test_user', password='test_user')