使用pytest的测试瓶app无法找到夹具客户端

时间:2017-12-12 09:37:55

标签: python flask pytest

我有一个简单的烧瓶应用程序,我想用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.

3 个答案:

答案 0 :(得分:2)

我尝试了很多不同的东西。我为此项目的pip更新了virtualenvironment,并更新了pytestpytest-flask。但没有一个能奏效。

我能够通过以下测试:

  • pytest删除了pytest-flaskvirtualenvironment
  • 删除了我在系统范围内的安装。
  • 奇怪的是,我有一个名为flask-pytest的包我删除了它(在env中)
  • 在系统范围内再次安装它们。
  • 再次在virtualenvironment上安装了它们。

我不知道这与测试有什么关系,但它有效。唯一不同的是我没有安装上述flask-pytest的东西。

答案 1 :(得分:2)

您需要删除不正确的client fixture(请参阅pytest-flask的实施内容以获取正确的内容。)

之后您需要在pytest-flask内安装pytestvirtualenv,最好删除系统范围内的内容以避免混淆。

之后你应该可以运行你的测试了。

答案 2 :(得分:0)

我刚刚遇到了同样的问题。解决方案是:

pip uninstall pytest-flask