Colin-b/pytest_httpx

Document how to assert that no responses are sent

Closed this issue · 3 comments

Similar to #18, but it wasn't resolved there. Suppose we have

def test_no_requests(httpx_mock):
    httpx_mock.add_response()
    my_function(...)
    assert not len(httpx_mock.get_requests())

This will throw at teardown unless you override the assert_all_responses_were_requested fixture to return False. However, this behavior might be desirable for other tests in the file. From what I can tell, there's no way to define the return value of the foregoing fixture depending on the test.

Maybe there should be an API on HTTPXMock which disables this check so that we have:

def test_no_requests(httpx_mock):
    httpx_mock.assert_all_responses_were_requested = False  # default is True
    httpx_mock.add_response()
    my_function(...)
    assert not len(httpx_mock.get_requests())

Hello,

You can write this test case instead if you don't expect any request to be issued:

def test_no_requests(httpx_mock):
    my_function(...)
    assert not httpx_mock.get_requests()

Unless I am missing something here ?

Best Regards

Thanks @Colin-b! It wasn't clear to me from the docs that this would work. Maybe it would be good to add this as an example?

Thanks for the suggestion @calebho , the section on checking requests has been updated and will be part of the next release so that it will be displayed on pypi.org as well.

As a side note, I would also like to point out that you could even remove the assertion if we consider the following in case of a regression in your code (request being issued while you expect no request):

  • pytest-httpx will raise a httpx.TimeoutException in case a response is not mocked.
  • Your code will then raise an exception (or at least the behavior that you are asserting will change).

However, should your code hide in some way that the exception occurred. then you will indeed have to assert that no request was issued.