我对如何测试需要登录的页面感到非常困惑。我在响应中不断获得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不知道我已经登录了。
答案 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')