循环遍历蓝图中的所有规则并检查json对文件,flask

时间:2014-03-27 16:49:47

标签: python json unit-testing python-2.7 flask

我正在测试一个烧瓶应用程序。我有很多看起来像这样的approutes:

@bp.route('/place', methods=['GET'])
def get_json():
  ...
  return json.dumps(some_data)

我想要做的是获取此蓝图,实例化它,并检查刚转储json的所有方法是否正在转储我在测试用例中期望的json。到目前为止,我有这个:

from blueprint.my_bp import my_bp

app = Flask(__name__)
app.register_blueprint(my_bp, url_prefix='/test')
my_bp.data = fake_data

def tests():
  with app.test_client() as c:
    for rule in app.url_map.iter_rules():
      if len(rule.arguments) == 0 and 'GET' in rule.methods:
        resp = c.get(rule.rule)
        log.debug(resp)
        log.debug(resp.data)

但是,我有一个看起来像这样的方法,因为它没有实现:

@bp.route('/')
def show_summary():
  abort(404)

这会出现在我的测试中,因为它似乎在技术上包含了方法中的'GET'。

鉴于此,有没有办法限制测试只包括返回json的那些?

1 个答案:

答案 0 :(得分:1)

一种方法是测试响应是否返回JSON。你可以尝试类似的东西:

resp = c.get(rule.rule)
try:
    json_data = resp.loads(resp.data) # this line will throw exception if not JSON
    log.debug(resp)
    log.debug(json_data)
except:
    pass