gpt4 book ai didi

python - WebTest:使用装饰器+数据存储调用进行测试

转载 作者:行者123 更新时间:2023-12-01 06:15:12 25 4
gpt4 key购买 nike

我有一个 Google App Engine 应用程序,我的请求 hadler 有一个执行身份验证的装饰器。通过 WebTest 我发现 yesterday如何设置登录用户和管理员。

今天我的身份验证装饰器变得有点复杂了。它还会检查用户是否在数据库中拥有个人资料,如果没有,他将被重定向到“新用户”页面。

def authenticated(method):
@functools.wraps(method)
def wrapper(self, *args, **kwargs):
user = users.get_current_user()
if not user:
self.redirect(users.create_login_url(self.request.uri))
return

profile = Profile.get_by_key_name(str(user.user_id))
if not profile:
self.redirect( '/newuser' )

return method(self, *args, **kwargs)

return wrapper

现在添加配置文件部分会破坏我的单元测试,该测试检查用户是否已登录并获取状态代码 200(assertOK)。

def user_ok(self):
os.environ['USER_EMAIL'] = 'info@example.com'
os.environ['USER_IS_ADMIN'] = ''
response = self.get( '/appindex' )
self.assertOK(response)

所以现在我需要能够以某种方式将配置文件功能注入(inject)装饰器中,以便我可以在测试中设置它。有人知道如何做到这一点吗?我一直在想办法,但我一直陷入困境。

最佳答案

您应该在测试期间创建一个配置文件,以供装饰器使用:

def user_ok(self):
key_name = 'info@example.com'
new_user = Profile(key_name=key_name)
new_user.put()

os.environ['USER_EMAIL'] = key_name
os.environ['USER_ID'] = key_name
os.environ['USER_IS_ADMIN'] = ''
response = self.get( '/appindex' )
self.assertOK(response)

# Now let's reset it to check that the user will be redirected.
new_user.delete()
response = self.get( '/appindex' )
self.assertEqual(response.headers['Location'], 'http://localhost/newuser')

关于python - WebTest:使用装饰器+数据存储调用进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3596958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com