我是Django的初学者,我正在编写一个简单的会计应用程序。现在我开始为这个应用程序编写一些测试用例。
我的应用中有一个profile
表单,允许用户编辑自己的个人资料。如果数据已成功更改,请致电HttpResponseRedirect
至index
页
我使用assertRedirect
方法确保在表单数据正确时将页面重定向到index
页面
但是当我在我的TestCase
类中调用此方法时,我发现它清除了会话数据并且用户不再登录
以下是我的代码的一些部分:
class TestEditProfile(TestCase):
def test_change_password(self):
response = self.client.get(reverse('account:profile'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'First name')
data = self.get_user_data()
response = self.client.post(reverse('account:profile'), data=data)
self.assertRedirects(response, reverse('account:index'))
当我调试我的程序时,我看到在调用self.assertRedirects
后,用户会话数据将被清除,用户不再登录,所以如果我想post
请求{{1}它会忽略它,因为profile
视图为profile
我的代码或其他内容是否有问题?
非常感谢
更新:我使用login_required
对代码进行了深入研究,并意识到此方法会清除用户会话数据:
pydev debugger
源代码是file:testcase.py
的第320行在运行此行之前if fetch_redirect_response:
redirect_response = response.client.get(path, QueryDict(query),
secure=(scheme == 'https'))
的大小为3并且有键:self.client.session._session
,'_auth_user_backend' (4413833840)
和'_auth_user_hash' (4411636976)
但是在运行此行之后'_auth_user_id' (4408855216)
已完全清除!