2016-07-25 31 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