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

Stackable expectations

Open csernazs opened this issue 5 years ago • 2 comments

In many cases, the parameters for expect_request() is very long, especially when multiple headers are specified or the request have a long data or json in its body. In such case the expect_request() call can be very long. If it bothers the developer, it needs to be shortened, for example by moving the literals to variables and then specifying the variables for the expect_request() call. In some cases, there are common expectations specified for each request, such as the content-type header is set to application/json.

It would be great to somehow bake a command, similar to the sh package's bake method.

So, it would look like:


server = httpserver.bake(headers={"content-type": "application/json"}) # and probably other common kwargs
server.expect_request("/foo", json={"foo": "bar"}).respond_with_json({"foo": "bar"})

Here, the bake is similar to the functools.partial function so it creates a new httpserver-like object whose defaults are changed.

csernazs avatar Oct 18 '20 08:10 csernazs

i wonder whether this could be realized on the fixture level, so that the definition of these common properties happens in the conftest.py.

funkyfuture avatar Mar 16 '23 11:03 funkyfuture

I think this could be done easily: conftest.py:

@pytest.fixture()
def myserver(httpserver):
    return httpserver.bake(headers={"content-type": "application/json"})

test_foo.py:

def test_foo(myserver):
    server.expect_request("/foo", json={"foo": "bar"}).respond_with_json({"foo": "bar"})

At the moment it is just an idea, it is not implemented yet.

csernazs avatar Mar 16 '23 12:03 csernazs