1

我想将 pytest 与 Quart 的扩展 quart-openapi 一起使用,但文档示例和谷歌搜索没有帮助。

我在哪里可以找到与 quart-openapi 一起使用的 pytest 测试工具的具体示例?

到目前为止,我已经阅读了这些来源:

Quart 的测试博客教程

关于测试的 Quart 文档

关于类似工具的 Stack Overflow 问题

项目结构为:

├── app
│   ├── __init__.py
│   ├── api.py
│   ├── log.py
│   
├── requirements.txt
├── run.py
└── tests
    ├── __init__.py
    └── test_endpoint.py

app/__init__.py


    from .api import QUART_APP

api.py


    """Registered endpoints"""
    from quart import jsonify
    from quart_openapi import Pint, Resource

    # Docs say that Pint will forward all init args to Quart()
    QUART_APP = Pint(__name__, title="Quart tts")

    @QUART_APP.route('/')
    class Home(Resource):
        """ Endpoint that reports its own status """
        async def get(self):
            """ Report status of service """
            return jsonify({'OK': True, 'hello': 'world'})

test_endpoint.py


    import pytest
    from app.api import QUART_APP as app
    @pytest.fixture(name='test_app')
    def _test_app():
        return app

    @pytest.mark.asyncio
    async def test_app(app):
        client = app.test_client()
        response = await client.get('/')
        assert response.status_code == 200

实际结果:ERROR at setup of test_app ... fixture 'app' not found

预期结果:我可以使用 pytest 使用 quart-openapi 进行测试。

4

1 回答 1

3

查看 pytest 夹具文档,您给夹具的名称就是您要引用的名称。所以我可能会将“名称”参数更改为“testapp”,如下所示:

import pytest
from app.api import QUART_APP as app
@pytest.fixture(name='testapp')
def _test_app():
  return app

@pytest.mark.asyncio
async def test_app(testapp):
  client = testapp.test_client()
  response = await client.get('/')
  assert response.status_code == 200

When I set this up in my own directory the above works and passes so it should work for you.

于 2019-01-31T16:31:16.167 回答