Httpotemkin provides tools to mock HTTP servers for system-level tests. It uses docker containers to provide mocks of HTTP APIs and Ruby classes which can be used in tests to execute applications in the environment of the mocked APIs. This allows to test applications which talk to HTTP APIs without having to change them in any way for the tests, so that very high-level system tests can be done in a controlled environment suitable for test driven development.
The tests in spec/system
provide examples of how tests using httpotemkin can
be written.
Debugging
When debugging tests (which actually means reverse engineering the protocol of the service and implementing the required bits) it is convenient to get in a mode of interactive debugging, where there are containers for the server and the client under control of a shell. This allows to manually trigger calls from the client and see the resulting requests in the log of the server. By adapting the server calls one at a time, it's easily possible to provide the minimal mocking to make the tests run.
One way to enter the state of debugging a specific test is to add debug code to
the RSpec test, e.g. add a binding.pry
call just before the client test call
is executed and passing r.pry
to the rspec
command. Then you end up in a
state where all containers are started, test data is injected, and you can debug
the calls which are supposed to take place.