<p>Martjin的答案肯定能解决您的问题,但有时您没有时间(或将要)模拟您调用的所有组件,而这些组件正是您想要测试存在性的路径。</p>
<p><strong>你为什么要嘲笑我?</strong>好吧,调用<code>get('some_route')</code>将首先检查此路由是否存在,然后。。。它将被处决!</p>
<p>如果视图是一个复杂的视图,并且您需要有fixture、envs变量和任何其他准备工作(如果路由存在),那么您需要重新考虑您的测试设计。</p>
<h2>如何避免:</h2>
<p>您可以在应用程序中列出所有路由。清单上有你正在测试的那个。</p>
<p>在下面的示例中,您可以通过站点地图的实现在实践中看到这一点。</p>
<pre><code>from flask import Flask, url_for
app = Flask(__name__)
def has_no_empty_params(rule):
defaults = rule.defaults if rule.defaults is not None else ()
arguments = rule.arguments if rule.arguments is not None else ()
return len(defaults) >= len(arguments)
@app.route("/site-map")
def site_map():
links = []
for rule in app.url_map.iter_rules():
# Filter out rules we can't navigate to in a browser
# and rules that require parameters
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
# links is now a list of url, endpoint tuples
</code></pre>
<p>参考文献:</p>
<p><a href="https://stackoverflow.com/questions/13317536/get-a-list-of-all-routes-defined-in-the-app">get a list of all routes defined in the app</a></p>
<p><a href="http://flask.pocoo.org/snippets/117/" rel="nofollow noreferrer">Helper to list routes (like Rail's rake routes)</a></p>