Open philosucker opened 4 months ago
RuntimeError: Task attached to a different loop
pytest는 기본적으로 각 테스트 함수에 대해 새로운 이벤트 루프를 생성하기 때문에, 비동기 함수들이 서로 다른 이벤트 루프에서 실행될 수 있다.
따라서 a : 별도의 이벤트루프 함수를 짤 필요 없이 테스트 함수 하나에 테스트할 함수들을 모아 넣고, 테스트 함수들이 실행될 DB 및 클라이언트 초기화 함수의 fixture의 범위를 function으로 한정하든가
@pytest.fixture(scope="function") async def initialize_test_db(): ... @pytest.fixture(scope="function") async def async_client(initialize_test_db): ... yield client async def 테스트 함수들(client): ...
b : 별도의 이벤트루프 함수를 만들어 fixture의 범위를 session으로 두고 이 이벤트 루프 함수를 DB와 클라이언트 초기화 함수에 넣은 뒤, 테스트 함수들을 전부 기능별로 분리하든가
@pytest.fixture(scope="session") def event_loop(): loop = asyncio.get_event_loop_policy().new_event_loop() yield loop loop.close() @pytest.fixture(scope="session") async def initialize_test_db(event_loop): ... @pytest.fixture(scope="session") async def async_client(initialize_test_db, event_loop): ... yield client async def 테스트 함수들(client):
a, b 둘 중 하나의 방법을 쓰면 된다.
05.26.2024 이슈 해결
현재 이슈 05.24.2024
에러 메시지
에러 해결 방법
pytest는 기본적으로 각 테스트 함수에 대해 새로운 이벤트 루프를 생성하기 때문에,
비동기 함수들이 서로 다른 이벤트 루프에서 실행될 수 있다.
따라서
a : 별도의 이벤트루프 함수를 짤 필요 없이 테스트 함수 하나에 테스트할 함수들을 모아 넣고,
테스트 함수들이 실행될 DB 및 클라이언트 초기화 함수의 fixture의 범위를 function으로 한정하든가
b : 별도의 이벤트루프 함수를 만들어 fixture의 범위를 session으로 두고
이 이벤트 루프 함수를 DB와 클라이언트 초기화 함수에 넣은 뒤,
테스트 함수들을 전부 기능별로 분리하든가
a, b 둘 중 하나의 방법을 쓰면 된다.
에러 원인