Flask对象无‘get’属性报错:工厂模式下测试请求问题排查
解决Flask测试中
AttributeError: 'Flask' object has no attribute 'get'的问题 你猜的没错!这个错误的核心原因就是不能直接用Flask应用对象发起HTTP请求,必须使用Flask专门提供的测试客户端来模拟请求行为。
Flask的Flask实例本身并没有get方法,这个方法是测试客户端的专属功能——它的作用就是模拟浏览器向你的应用发起GET、POST这类HTTP请求,帮你验证接口的响应是否符合预期。
给你修改一下test.py的代码,调整成正确的测试写法:
首先在setUp方法里创建测试客户端:
def setUp(self): self.app = create_app('testing') self.ctx = self.app.app_context() self.ctx.push() # 创建测试客户端,这是发起请求的关键 self.client = self.app.test_client() db.drop_all() db.create_all()
然后修改test_index_page方法,用客户端发起请求并验证状态码:
def test_index_page(self): # 用测试客户端发起GET请求 response = self.client.get("/") # 验证响应的状态码是否为200 assert response.status_code == 200
另外还要提醒你:之前的代码里直接把self.app.get("/")和200对比,除了用错对象之外,就算用对了客户端,也不能直接拿响应对象和整数比——客户端返回的是Flask的响应对象,你需要通过它的status_code属性来获取状态码数值。
内容的提问来源于stack exchange,提问作者user5948213
相关产品推荐
相关产品推荐

