Integration testing
Having covered unit tests, let's now move on to integration tests. In this type of testing, we're interested in asserting that all the different layers of our application are working together as expected. This is usually done by testing at the edges of your system, letting all the components in your application interact with each other, and then validating that the response is the anticipated one.
There are other types of testing, such as end-to-end testing, which go even a step further and test the system from the perspective of the end user. In our case, this would be through a browser, clicking through the buttons and links inside our application, and then asserting that the user sees the expected information. While we don't cover this type of testing in this book, much of what we'll talk about in this section also apply to end-to-end testing.
In this kind of test, where we're observing the application from the outside, we don't want to test every possible state combination...