如何修改Django测试框架中的session
我的网站允许个人在没有登录的情况下通过根据当前 session_key 创建用户来贡献内容
我想为我的视图设置一个测试,但似乎无法修改 request.session:
I想要这样做:
from django.contrib.sessions.models import Session
s = Session()
s.expire_date = '2010-12-05'
s.session_key = 'my_session_key'
s.save()
self.client.session = s
response = self.client.get('/myview/')
但我收到错误:
AttributeError: can't set attribute
在发出获取请求之前如何修改客户端会话的想法? 我已经看到这个,它似乎不起作用
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
django 测试框架的客户端对象使得接触会话成为可能。看看 http:// docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#django.test.client.Client.session 了解详细信息
注意:
要修改会话然后保存它,它必须首先存储在变量中(因为每次访问此属性时都会创建一个新的 SessionStore)
我认为下面这样的东西应该可以工作
The client object of the django testing framework makes possible to touch the session. Look at http://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#django.test.client.Client.session for details
Be careful :
To modify the session and then save it, it must be stored in a variable first (because a new SessionStore is created every time this property is accessed)
I think something like this below should work
这就是我的做法(受到 http://blog.mediaonfire.com/?p 中的解决方案的启发=36)。
之后,您可以将测试创建为:
等等...
This is how I did it (inspired by a solution in http://blog.mediaonfire.com/?p=36).
After that, you may create your tests as:
etc...
正如安德鲁·奥斯汀已经提到的,由于这个错误,它不起作用: https://code.djangoproject.com /ticket/11475
不过,您可以做的是:
使用 User.objects.create_user() 和 self.client.login() 创建并登录用户后(如上面的代码所示),会话应该可以工作。
As Andrew Austin already mentioned, it doesn't work because of this bug: https://code.djangoproject.com/ticket/11475
What you can do though is this:
After creating and logging in a user with User.objects.create_user() and self.client.login(), as in the code above, sessions should work.
向测试客户端中的会话添加值
根据文档,您可以通过例如https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.Client.session
这将允许您测试需要数据的视图会话才能正常运行。
那么对于这个问题:
as per the docs you can add values to the session in the test client via eg
https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.Client.session
This will let you test views that require data in the session to function correctly.
So for this question:
您可以创建一个插入虚拟数据(例如会话)的自定义视图。
具有相应网址的视图:/dummy/:
比在测试脚本中只需调用
self.client.get('/dummy/')
我还使用此虚拟视图来初始化会话中的虚拟数据手动测试时。
You can create a custom view which inserts dummy data such as the session.
The view with the corresponding url: /dummy/:
Than in test script just call
self.client.get('/dummy/')
I also use this dummy view to initilize the dummy data in the session when testing by hand.