TypeError: __init__() got an unexpected keyword argument 'as_tuple'

TypeError: __init__() got an unexpected keyword argument 'as_tuple'

当我测试我的 API 时,我最近开始收到以下错误。

        if request is None:
>           builder = EnvironBuilder(*args, **kwargs)
E           TypeError: __init__() got an unexpected keyword argument 'as_tuple'

/usr/local/lib/python3.7/site-packages/werkzeug/test.py:1081: TypeError

正如我从 Werkzeug 较新版本的文档中读到的那样,as_tuple 参数已被删除。

我的部分测试代码是


from flask.testing import FlaskClient

@pytest.fixture(name='test_client')
def _test_client() -> FlaskClient:
    app = create_app()
    return app.test_client()


class TestPeerscoutAPI:
    def test_should_have_access_for_status_page(self, test_client: FlaskClient):
        response = test_client.get('/api/status')
        assert _get_ok_json(response) == {"status": "OK"}

从版本 2.1.0 开始,werkzeug 已删除 Clientas_tuple 参数。由于 Flask 包装了 werkzeug 并且您使用的版本仍然传递此参数,因此它将失败。参见 the exact change on the GitHub PR here

您可以采用以下两种方法之一来解决此问题:

  1. 升级合剂

  2. 固定你的 werkzeug 版本

# in requirements.txt
werkzeug==2.0.3

添加到 Christian Di Lorenzo 的回答中

  1. 升级合剂
# in requirements.txt
Flask==2.1.1
  1. 固定你的 werkzeug 版本
# in requirements.txt
werkzeug==2.0.3