如何测试 Flask 使用的是 test_client 而不是客户端?
How to test that Flask is using test_client rather than client?
我在 Flask 中使用 Pytest fixtures。我的应用程序是使用应用程序工厂实例化的。
#conftest.py
@pytest.fixture(scope='session')
def app(request):
'''Session-wide test application'''
app = create_app('testing')
app.client = app.test_client()
app_context = app.app_context()
app_context.push()
def teardown():
app_context.pop()
request.addfinalizer(teardown)
return app
我想验证我的 fixture 创建的应用程序是否使用 Flask's built-in test_client,所以我写了一个测试:
#test_basics.py
def test_app_client_is_testing(app):
assert app.client() == app.test_client()
当我 运行 这个测试时,我得到: TypeError: 'FlaskClient' object is not callable
我做错了什么?
是测试不对,还是夹具不对?
app.client
已经是一个实例,您不应该再次调用它。最终,这个测试毫无意义。 client当然是测试客户端,刚才在fixture中就是这么创建的。此外,客户端永远不会相等,它们是不同的实例。
from flask.testing import FlaskClient
assert app.client == app.test_client() # different instances, never true
assert isinstance(app.client, app.test_client_class or FlaskClient) # still pointless, but correct
您可能需要两个装置:app
和 client
,而不是在应用程序上创建客户端。
@pytest.yield_fixture
def app():
a = create_app('testing')
a.testing = True
with a.app_context():
yield a
@pytest.yield_fixture
def client(app):
with app.test_client() as c:
yield c
from flask.testing import FlaskClient
def test_app_client_is_client(app, client):
# why?
assert isinstance(client, app.test_client_class or FlaskClient)
我在 Flask 中使用 Pytest fixtures。我的应用程序是使用应用程序工厂实例化的。
#conftest.py
@pytest.fixture(scope='session')
def app(request):
'''Session-wide test application'''
app = create_app('testing')
app.client = app.test_client()
app_context = app.app_context()
app_context.push()
def teardown():
app_context.pop()
request.addfinalizer(teardown)
return app
我想验证我的 fixture 创建的应用程序是否使用 Flask's built-in test_client,所以我写了一个测试:
#test_basics.py
def test_app_client_is_testing(app):
assert app.client() == app.test_client()
当我 运行 这个测试时,我得到: TypeError: 'FlaskClient' object is not callable
我做错了什么?
是测试不对,还是夹具不对?
app.client
已经是一个实例,您不应该再次调用它。最终,这个测试毫无意义。 client当然是测试客户端,刚才在fixture中就是这么创建的。此外,客户端永远不会相等,它们是不同的实例。
from flask.testing import FlaskClient
assert app.client == app.test_client() # different instances, never true
assert isinstance(app.client, app.test_client_class or FlaskClient) # still pointless, but correct
您可能需要两个装置:app
和 client
,而不是在应用程序上创建客户端。
@pytest.yield_fixture
def app():
a = create_app('testing')
a.testing = True
with a.app_context():
yield a
@pytest.yield_fixture
def client(app):
with app.test_client() as c:
yield c
from flask.testing import FlaskClient
def test_app_client_is_client(app, client):
# why?
assert isinstance(client, app.test_client_class or FlaskClient)