我有一个简单的烧瓶应用程序,我想用pytest测试它。
我的conftest.py
:
@pytest.fixture
def app(self):
app = create_app(TestingConfig)
return app
我的test_view.py
:
class TestMainView:
def test_ping(self, client):
res = client.get(url_for('main.index'))
assert res.status_code == 200
当我使用pytest
运行测试时,它会抛出错误说:
fixture 'client' not found
> available fixtures: app, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, monkeypatch, pytestconfig, record_xml_property, recwarn, tmpdir, tmpdir_factory
> use 'pytest --fixtures [testpath]' for help on them.
我有另一个测试文件,我测试默认配置并通过:
class TestTestingClass(object):
app = create_app(TestingConfig)
def test_app_is_test(self):
''' test the test enviroment is set okay and works'''
assert self.app.config['SECRET_KEY'] == 'something hard'
assert self.app.config['DEBUG'] == True
assert self.app.config['TESTING'] == True
assert current_app is not None
assert self.app.config['SQLALCHEMY_DATABASE_URI'] == 'sqlite:////tmp/testing.db'
修改: 我能够通过更改为:
来通过空测试 conftest.py
:
@pytest.fixture
def app():
app = create_app(TestingConfig)
return app
@pytest.fixture
def client(app):
return app.test_client()
我的测试文件:
def test_index(client):
assert True
但是,如果是test_index
,我仍然无法通过{<1}}。
def test_index(client):
assert client.get(url_for('main.index')).status_code == 200
但这一次,我收到一条错误,上面写着:
RuntimeError: Attempted to generate a URL without the application context being pushed. This has to be executed when application context is available.
答案 0 :(得分:2)
我尝试了很多不同的东西。我为此项目的pip
更新了virtualenvironment
,并更新了pytest
和pytest-flask
。但没有一个能奏效。
我能够通过以下测试:
pytest
删除了pytest-flask
和virtualenvironment
。flask-pytest
的包我删除了它(在env
中)virtualenvironment
上安装了它们。我不知道这与测试有什么关系,但它有效。唯一不同的是我没有安装上述flask-pytest
的东西。
答案 1 :(得分:2)
您需要删除不正确的client fixture
(请参阅pytest-flask
的实施内容以获取正确的内容。)
之后您需要在pytest-flask
内安装pytest
和virtualenv
,最好删除系统范围内的内容以避免混淆。
之后你应该可以运行你的测试了。
答案 2 :(得分:0)
我刚刚遇到了同样的问题。解决方案是:
pip uninstall pytest-flask