2014-03-27 20 views
1

我正在測試燒瓶應用程序。我有很多approutes說是這個樣子:循環通過藍圖中的所有規則,並檢查json文件,燒瓶

@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

一種方法可能是測試響應是否返回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