2016-07-25 29 views
0

我正在用Flask编写用Python编写的API的单元测试。具体来说,我想测试我的路由的错误处理工作正常,所以我想故意构建缺少参数的URL。我想通过使用url_for()来避免硬编码,但是不允许缺少参数,那么如何构建错误的URL?如何在单元测试中故意使用url_for()构建错误的URL?

+0

你是在说这些? =参数'或'/这些/参数/ 42 /名称'? –

+0

所以它是一个带有URL参数的GET,例如/ status/ Eno

回答

2

说到url_for它会生成两种类型的网址。如果有被命名的路线,像

@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']? 

然而,这不存在于任何路线参数本身将被简单转化成一个查询字符串参数:

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

所以,当你问一个缺失参数中的URL,什么你问的是一个URL塔t没有路线。您无法为此创建URL,因为flask正在尝试为存在的端点构建参数。

您可以做的最好的是使用超出界限的参数值,例如,

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

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

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

我想我最终使用了越界值,例如'url_for('api.status',id ='')'来测试不好的请求处理。感谢您的解释。 – Eno