如何在单元测试中故意用URL\ u for()构建错误的URL?

2024-03-29 02:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Flask为用Python编写的API编写单元测试。具体来说,我想测试我的路由的错误处理是否正常工作,所以我想故意构建缺少参数的url。我想通过使用url \u for()避免硬编码,但这不允许缺少参数,所以如何构建错误的url?你知道吗


Tags: apiurlflask路由编码for参数错误
1条回答
网友
1楼 · 发布于 2024-03-29 02:38:40

当涉及到url_for时,它会生成两种url。如果有命名的路由,比如

@app.route('/favorite/color/<color>')
def favorite_color(color):
    return color[::-1]

则URL参数是必需的:

url_for('favorite_color')
BuildError: Could not build url for endpoint 'favorite_color'. Did you forget to specify values ['color']?

但是,路由本身中不存在的任何参数都将简单地转换为querystring参数:

print(url_for('favorite_color', color='blue', no='yellooooowwww!'))
/favorite/color/blue?no=yellooooowwww%21

因此,当您请求一个缺少参数的URL时,您需要的是一个没有路由的URL。您无法为此构建URL,因为flask正在尝试为存在的终结点构建参数。你知道吗

最好的方法是使用超出界限的参数值,例如

url_for('favorite_color', color='toaster')

烤面包机不是真的颜色,因此应该返回404。缺少的参数在不同的上下文中也可能有意义,因此您必须对此进行说明。 如果您真的想有丢失的参数,您真正想做的是使用querystring参数。但是,如果您执意要确保服务器上不存在的URL实际上不存在于服务器上,那么您可以这样做:

url_for('favorite_color', color='fnord').replace('/fnord', '')

相关问题 更多 >