【发布时间】:2015-02-21 07:31:01
【问题描述】:
这是我的 Flask-Restful 应用中 report_runner.py 的 ReportRunner 类中的方法:
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 方法和完整的测试。
-
什么是
response.status_code,在您致电assert_equals()之前? -
this question 中的 cmets 暗示您可能希望使用
response.json()而不是response.json。不过,这并不能解决您的问题。 -
@SeanAzlin 响应码是 200。
-
我认为 jsonify() 需要被调用,但我对flask了解不多。
标签: python json nosetests flask-restful