Это метод в классе ReportRunner в report_runner.py в моей Колбе-Restful приложения:теста носа Python неудача в ответ JSON
class ReportRunner(object):
def __init__(self):
pass
def setup_routes(self, app):
app.add_url_rule("/run_report", view_func=self.run_report)
def request_report(self, key):
# code #
def key_exists(self, key):
# code #
def run_report(self):
key = request.args.get("key", "")
if self.key_exists(key):
self.request_report(report_type, key)
return jsonify(message = "Success! Your report has been created.")
else:
response = jsonify({"message": "Error => report key not found on server."})
response.status_code = 404
return response
и тест носа вызывает URL, связанный с этим маршрутом
def setUp(self):
self.setup_flask()
self.controller = Controller()
self.report_runner = ReportRunner()
self.setup_route(self.report_runner)
def test_run_report(self):
rr = Report(key = "daily_report")
rr.save()
self.controller.override(self.report_runner, "request_report")
self.controller.expectAndReturn(self.report_runner.request_report("daily_report"), True)
self.controller.replay()
response = self.client.get("/run_report?key=daily_report")
assert_equals({"message": "Success! Your report has been created."}, response.json)
assert_equals(200, response.status_code)
и тест был неудачу со следующим сообщением:
AttributeError: 'Response' object has no attribute 'json'
, но в соответствии с docs кажется, что так вы это делаете. Я могу изменить возвращаемое значение из метода или мне нужно структурировать тест по-другому?
Испытание теперь Попутно написано так:
json_response = json.loads(response.data)
assert_equals("Success! Your report has been created.", json_response["message"])
, но я не ясно, о разнице между этими двумя подходами.
Как указано, ваша проблема заключается в том, как документация говорит, что это должно быть сделано. Необходимо больше контекста, чтобы понять, что происходит неправильно, например. полный метод API и полный тест. – logc
Что такое 'response.status_code' как раз перед вызовом' assert_equals() '? –
Также комментарии в [этот вопрос] (http://stackoverflow.com/questions/25398218/getting-json-response-using-requests-object-flask) подразумевают, что вы можете использовать 'response.json()' вместо 'response.json'. Тем не менее, это не повлияет на вашу проблему. –