Image for post
Image for post

Jest Don’t Repeat Yourself

Marco Arras
Sep 18, 2019 · 2 min read

Unit testing, everybody’s favorite part about writing code. Ok, it may not be for everyone, but maybe that’s just because you have not had the opportunity. Until recently I was in the same boat. “The code works, why do I need to test it?” Well, after writing a few myself, it didn’t actually seem so bad. I would even argue that it made me a better programmer.

It goes a little like this: “Do this, expect that. Do this, with this input, and expect this other thing.” You’re basically proving that your code will do what it was intended to do, with all the possible inputs. At the very least, it gives you confidence that your code will not break, or have any unintended consequences. Sweet, right? You can have it fail gracefully or as expected. As an added bonus, it prevents other programmers from unintentionally breaking your code in the future. You may even go back to the original function and improve it, for more usability.

Now let’s start with the code that we will be testing.

This is a simple function for the purposes of this article, that will return the band’s name, based on the name of the song. If this song, get the matching artist. (Maybe you can tell what kind of music I listen to.) Now what if we pass in a song that no one listens to? Well, with unit testing we will know what to expect. So let’s get to it.

Now we have covered all possible conditions that our function might receive. Looks good, but we can do better. I see a lot of unit test that tend to look something like this. It works, and that is great, but we are not doing a very good job about keeping it DRY. The same principles about not repeating our selves can be applied here too.

That looks so much cleaner. We are running the same test for each input, so why not just create one test? It’s easier to read, and less than half the previous lines of code. We still get the same results. I like to use the test each in the table format, but it can be a pain if you like keeping the pipes aligned. There’s plenty of documentation on it here. Just remember that it uses template literals.

Thanks for reading, let me know if you like this or would like more on it.

Headstorm

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store