Open
Description
consider the following test:
import pytest
import asyncio
@pytest.mark.asyncio
async def test_foo():
def raise_():
raise Exception
asyncio.get_running_loop().call_soon(raise_)
await asyncio.sleep(0)
it passes cleanly.
However if you explicitly collect any errors:
import pytest
import asyncio
@pytest.mark.asyncio
async def test_foo():
loop = asyncio.get_running_loop()
old_exception_handler = loop.get_exception_handler()
exceptions = []
def exception_handler(*args, **kwargs):
exceptions.append((args, kwargs))
loop.set_exception_handler(exception_handler)
try:
def raise_():
raise Exception
asyncio.get_running_loop().call_soon(raise_)
await asyncio.sleep(0)
assert exceptions == []
finally:
loop.set_exception_handler(old_exception_handler)
=================================== test session starts ====================================
platform linux -- Python 3.9.2, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: /home/graingert/projects/anyio, configfile: pyproject.toml
plugins: hypothesis-6.2.0, asyncio-0.14.0, anyio-2.1.0.post21+dirty
collected 1 item
ham.py F [100%]
========================================= FAILURES =========================================
_________________________________________ test_foo _________________________________________
ham.py:20: in test_foo
assert exceptions == []
E AssertionError: assert [((<_UnixSele...py:15'}), {})] == []
E Left contains one more item: ((<_UnixSelectorEventLoop running=True closed=False debug=False>, {'exception': Exception(), 'handle': <Handle test_fo...y:15>, 'message': 'Exception in callback test_foo.<locals>.raise_() at /home/graingert/projects/anyio/ham.py:15'}), {})
E Use -v to get the full diff
==================================== 1 failed in 0.04s ====================================