我有以下功能:
def do_login(user):
"""Log in user."""
session[CURR_USER_KEY] = user.id
以及以下测试:
def test_do_login(self):
"""Does do_login function work?"""
with app.test_request_context():
with self.client as c:
with c.session_transaction() as session:
do_login(self.testuser)
self.assertEqual(session[CURR_USER_KEY], self.testuser.id)
测试抛出 KeyError 失败,因为会话中没有与 CURR_USER_KEY 对应的值。该功能是如此简单,我什至不知道从哪里开始解决这个错误。显然,我理解错误的含义,但我不明白为什么调用函数时函数中的单行不会运行。有什么想法吗?
我尝试打印会话。它完全是空的。我尝试移动请求上下文、客户端和会话行,但无济于事。
您的测试尝试访问
session[CURR_USER_KEY]
两次:一次在 do_login
中,一次在对 self.assertEqual
的调用中。如果密钥不存在,则 do_login
会引发异常。
如果这是预期的行为,您应该使用
self.assertRaises
来执行该函数,以便可以测试 KeyError
是否确实被引发。
def test_do_login(self):
"""Does do_login function work?"""
with app.test_request_context():
with self.client as c:
with c.session_transaction() as session:
with self.assertRaises(KeyError):
do_login(self.testuser)
如果这不是预期的行为,并且do_login
应该向会话中添加一个条目,以便
self.assertEqual(session[CURR_USER_KEY], self.testuser.id)
会成功,那么你就发现了do_login
中的一个错误需要修复。