编写Flask视图单元测试时遇AssertionError问题求助
解决Flask单元测试AssertionError问题
问题出在哪
- 请求URL写错了:你在测试里用的
/article/<int:id>是Flask的路由定义语法,不是实际能访问的URL。服务器找不到这个路径,直接返回了Flask自带的默认404页面,自然搜不到你自定义模板里的<title>test</title>。 - 自定义404模板没生效:报错里的404内容是Flask默认的,说明你的自定义404模板要么没被正确调用,要么根本没配置错误处理函数。
怎么改
1. 修正测试的请求URL
把测试里的请求路径改成带具体ID的真实URL,比如:
response = tester.get('/article/1')
要是你想测试404场景,就用一个数据库里不存在的ID,比如/article/999,这样才能触发404错误。
2. 确保自定义404模板生效
在你的Flask应用代码里加上404错误处理函数,指定使用你的模板:
@app.errorhandler(404) def page_not_found(e): # 这里填你的404模板文件名 return render_template('404.html'), 404
同时确认你的404.html放在Flask默认的templates文件夹里,模板里确实有<title>test</title>。
3. 调整测试断言逻辑
如果是测试存在的文章页面,先断言状态码是200再检查title;如果是测试404,要确保触发的是自定义404模板,再做断言:
def test_article(self): tester = app.test_client(self) # 用不存在的ID触发自定义404 response = tester.get('/article/999') self.assertEqual(response.status_code, 404) self.assertIn(b"<title>test</title>", response.data)
额外检查点
- 确认Flask应用配置里的
TEMPLATE_FOLDER指向正确的模板目录 - 重启测试服务,确保代码修改生效
内容的提问来源于stack exchange,提问作者Hamza maroc
相关产品推荐
相关产品推荐

