1

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

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

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)

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

4

1 回答 1

2

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

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')
于 2010-08-30T00:24:10.313 回答