When I write unit tests for APIs, I try to write tests that are as flexible and durable as possible. I try my best to avoid brittle tests that may break if some implementation in my code base should change.
Ideally, tests should not care at all about the implementation, and only care that with X input, we get Y output. Some of your endpoints may return Laravel API Resources. I've seen some developers write tests that ensure that the resource is returned compared to a given shape / array. But, we don't really care about that, do we? We may change our API Resource class, but we want our test to stay resilient.
In the example image above, we'll say we only really care that the title and content of a post is included in the API response. Other fields may change in our resource, but this test ensures that those two fields are always contained in the response.
This is best achieved by using assertJsonFragment. You may have used assertJson()
before, but since we are interested in creating as durable tests as possible, assertJsonFragment
ensures the tests won't fail if the shape of our returned response changes.
Top comments (1)
Yeah, testing on Laravel is fun with the small small but very powerful functions that are available.