4.5. 添加认证后的单元测试

添加授权后,执行nosetests,会发现控制器的单元测试报错。 因为没有经过授权所有页面的输出都是“尚未授权”。实际上, 只要在每一个测试用例运行之前,访问 security控制器的login方法, 以实现登录,设置正确的session,则后续访问会自动带上cookie, 得到正确的授权页面。

在控制器的测试用例基类TestController中加上login方法,以简化登录调用:

class TestController(TestCase):
    ...
    def login(self, username, password=""):
        res = self.app.get(url_for(controller='security'))
        form = res.forms[0]
        form['username'] = username
        if not password:
            d = eval(config.get('test_users', {}))
            password = d.get(username,'')
        form['password'] = password
        form.submit()

在测试用例中调用login方法:

self.login('root')
res = self.app.get(url_for(controller='check')) 
assert res.status == 200 
assert '''<input type="submit" name="submit" value='Check Permissions'>''' in res.body 
assert res.c.reposlist == ['/', u'repos1', u'repos2', u'repos3', u'document']