9

以下の例は、非常に一般的な使用例だと思います。

  1. データベースへの接続を1 回作成し、
  2. この接続を渡して、どのデータを挿入するかをテストします
  3. データを検証するテストに接続を渡します。

@pytest.fixture(scope="module")原因の範囲の変更ScopeMismatch: You tried to access the 'function' scoped fixture 'event_loop' with a 'module' scoped request object, involved factories

また、ループは接続を渡すことによってすでにアクセス可能であるため、test_insertandtest_findコルーチンは event_loop 引数を必要としません。

これら2つの問題を解決する方法はありますか?

import pytest

@pytest.fixture(scope="function")  # <-- want this to be scope="module"; run once!
@pytest.mark.asyncio
async def connection(event_loop):
    """ Expensive function; want to do in the module scope. Only this function needs `event_loop`!
    """
    conn await = make_connection(event_loop)
    return conn


@pytest.mark.dependency()
@pytest.mark.asyncio
async def test_insert(connection, event_loop):  # <-- does not need event_loop arg
    """ Test insert into database.

        NB does not need event_loop argument; just the connection.
    """
    _id = 0
    success = await connection.insert(_id, "data")
    assert success == True


@pytest.mark.dependency(depends=['test_insert'])
@pytest.mark.asyncio
async def test_find(connection, event_loop):  # <-- does not need event_loop arg
    """ Test database find.

        NB does not need event_loop argument; just the connection.
    """
    _id = 0
    data = await connection.find(_id)
    assert data == "data"
4

2 に答える 2