pytest-tornado icon indicating copy to clipboard operation
pytest-tornado copied to clipboard

Mocking coroutine called on handler

Open lecardozo opened this issue 5 years ago • 1 comments

I'm currently trying to mock a coroutine that is called inside the .get method of a handler. Let's call it, dummy_function.

from tornado.web import RequestHandler
from dummy import dummy_function

def Handler(RequestHandler):
    async def get(self):
        await dummy_function()

My initial approach for mocking this function was to apply the mock on the app fixture

from server.application import MyApplication

async def mocked_dummy():
    return []

@pytest.fixture
@patch("path.to.handler.dummy_function", mocked_dummy)
def app():
    return MyApplication()

@pytest.mark.gen_test
async def test_api(http_client, base_url):
   response = await http_client.fetch(base_url + "/endpoint")
   # run asserts...

When I run this, the patch doesn't work and the original dummy_function is not replaced. Is this the right approach?

Thanks!

lecardozo avatar Dec 04 '19 14:12 lecardozo

Please try

@pytest.mark.gen_test
async def test_api(http_client, base_url):
   with patch("path.to.handler.dummy_function", mocked_dummy):
     response = await http_client.fetch(base_url + "/endpoint")
   # run asserts...

dingyaguang117 avatar Jan 30 '20 17:01 dingyaguang117