This is another tale of redemption… I really enjoy minimalistic solutions and yet, I was not using for integration tests…
So, as everything that needs a start, what was the problem? For some time, I have been thinking about integration tests. What I am calling integration here means a way to test an API that goes through other APIs.
The non minimal
I tried a few approaches. One was to create a “fake” data structure that would represent the return of one API but that proved to be very difficult to insert in my coding routine.
Another approach was to use a http request client. The one I used the most was restclient mode in emacs. Which is pretty good. Here is an example of a GET request from the README:
# XML is supported - highlight, pretty-print
With the mode, you have some shortcuts and can have a bunch of requests in a single file. It is pretty cool actually. The problem? it is not very good in the automation front… I did not find an easy way to run all these requests.
Well, what is the solution? Thinking minimal. Like, really minimal. I mean curl minimal.
Now, what is the problem with curl? It is tedious to make it work if you are not used to it. You have a lot of the control of how the request should be made…
Save this. We will come back to it.
Why is it a solution, then? Because you made your request with a command line, it is very easy to automate with a script, such as a shell script.
For instance, you can create an “integration” test script like so:
# testing with 10
curl -X GET http://www.redmine.org/issues.xml?limit=10
# a test with json post
curl -X POST http://www.afakeurl.org/afakemethod --json @path-to-json-file
Pretty simple if you ask me. Now, after a commit or when you feel like it, it is one command away.
Remember the problem? Well, I wonder if it really is. More control over it means that you are fully aware of what is going on. Meaning, you have a better understanding of the process. You have to study more? Sure, however I would argue it is the extra mile that could make you a better coder.