我配置了我的金字塔应用程序,以便在按照官方教程进行身份验证后将user
对象附加到request
。目前为止,一切都好。。。但是虽然它运行良好并且我可以使用浏览器对其进行测试,但我不明白为什么在 webtest 测试中user
没有附加到请求中。我以这种方式配置了我的测试类:
from my_pyramid_app import main as make_app
from webtest.app import TestApp
from pyramid import testing
class LoginTestCase(TestCase):
def setUp(self):
self.config = testing.setUp()
self.app = TestApp(make_app({}))
在测试中:
# submit valid login data to /login and expect redirect to "next"
response = self.app.post('/login', data, status=302)
redirect = response.follow()
它按预期工作,用户经过身份验证并重定向到"next"中指定的路径,但redirect.request
不包含user
。为什么?我该怎么办?
webtest的文档说:
模拟身份验证的最佳方法是应用程序看起来 在 environ['REMOTE_USER'] 中查看某人是否经过身份验证。然后你 可以简单地设置该值,例如:
app.get('/secret', extra_environ=dict(REMOTE_USER='Bob'))
但老实说,这对我来说听起来很痴呆:/(我的意思是如果我手动定义一个变量,测试的意义是什么?!
webtest 和 pyramid 都使用 webob,但这并不意味着 pyramid 的请求与 webtest 的 response 是同一个对象。
WebTest 和测试应用程序之间共享的唯一不可变对象是 Environ 字典。
这意味着,如果您使用"myapp.user"之类的键将用户存储在request.environ中,则可以检索用户(点和小写很重要,请参阅PEP333)。