How do I define async fixtures and use them in async tests?
The following code, all in the same file, fails miserably. Is the fixture called plainly by the test runn
Coroutine functions are not natively supported by PyTest, so you need to install additional framework for it
If you use pytest-aiohttp, your problem solves in this way
import asyncio
import pytest
from app import db
url = 'postgresql://postgres:postgres@localhost:5432'
@pytest.fixture(scope='session')
def loop():
return asyncio.get_event_loop()
@pytest.fixture(scope='session', autouse=True)
async def prepare_db(loop):
async with db.with_bind(f'{url}/postgres') as engine:
await engine.status(db.text('CREATE DATABASE test_db'))
await db.set_bind(f'{url}/test_db')
await db.gino.create_all()
yield
await db.bind.close()
async with db.with_bind(f'{url}/postgres') as engine:
await engine.status(db.text('DROP DATABASE test_db'))
Main idea is using synchronous loop-fixture
which will be used by async fixtures