AttributeError: 'function' object has no attribute 'get' when testing Flask requests

AttributeError: 'function' object has no attribute 'get' when testing Flask requests

下午好, 我正在为我的 Flask 应用程序开发一些单元测试。这是我第一次尝试为 Flask 应用程序开发单元测试,但我目前在尝试测试 GET 请求时遇到此错误。

    def testTagCategories():
>       response = client.get("/forum")
E       AttributeError: 'function' object has no attribute 'get'

我一直在努力寻找问题所在,因为我已经按照 Flask 文档中要求的所有步骤进行操作。这是代码。

    @pytest.fixture(scope='session')
def test_client():
    flask_app = app()
    testing_client = flask_app.test_client()
    ctx = flask_app.app_context()
    ctx.push()
    yield testing_client
    ctx.pop()

@pytest.fixture()
def client(app):
    return app.test_client()

@pytest.fixture()
def runner(app):
    return app.test_cli_runner()

最后,这是我得到错误的函数之一。提前致谢。

def test_access():
    response = client.get("/")
    assert (response.status_code == 200)

我也在学习对烧瓶控制器进行单元测试,所以请对我的答案持保留态度。

但是在失败的代码中(如下所示)似乎没有客户端实例,因此您无法调用 get 方法。

def test_access():
    response = client.get("/")
    assert (response.status_code == 200)

我确信有一种更好的方法可以通过在每个测试夹具之前创建客户端来实现(这就是我用另一种我更熟悉的语言来做到这一点的方法,比如 C# 在每个测试之前进行设置/拆卸)测试)。

但像这样的东西对我有用:

from app import application

def test_access():
    client = application.test_client()
    response = client.get('/')
    assert response.status_code == 200
    html = response.data.decode()
    assert 'xxx' in html

在我的应用程序目录中有一个 __init__.py 里面有 application = Flask(__name__) 。这就是 from app import 应用程序正在导入的内容。

但很想听听其他人提供更好的解决方案。

编辑:在导致错误的函数上,尝试将签名更改为以下内容:

def test_access(client):