A common Rails testing question is which testing framework to use. RSpec and Minitest are the two that most people are deciding between. To many beginners it’s not clear which is the better choice.
We could weigh the technical pros and cons of each framework. Many people find things to love and hate about both RSpec and Minitest. You can find some passionate flame wars online if you look.
But before we get into all that, there are some realities to consider that overshadow the relative technical merits of the two frameworks. There are two particular facts we should think about.
Fact #1: usually, someone else decides for you
Most of us don’t have much choice as to whether to use RSpec or Minitest at work.
At some point we’ll get a job. At that job they’ll either use RSpec there or Minitest (or something else or nothing at all). Whatever they use at work, that’s what we’ll be using. Our personal preferences are moot.
Fact #2: usually, they’ve chosen RSpec
For better or worse, it’s my experience and the experience of most Rails developers I’ve talked with that most commercial projects use RSpec. (Note how I said most commerical projects. Most commercial projects use RSpec and most OSS Ruby projects, in my experience, use Minitest. I do not know why this is the way it is.)
Out of curiosity I did a (totally unscientific) poll regarding which test framework they use at work. Take it with a grain of salt, but here are the results.
Even if my numbers are off by quite a bit, RSpec is still the more popular framework.
What does this mean?
My take is that this means if your goal is to get a Rails job, learning RSpec over Minitest will give you a higher probability that your skills match the tech stack that’s used at any particular company.
Some people may object to this way of looking at it. They might argue that if you always you go with whatever’s most popular instead of what’s the best technical choice, you may end up using a Windows laptop or switching from Rails to Node.js.
This argument is flawed though. We’re free to make our own choices on the big things but we can’t dictate what comes along with those choices. We can choose to use Rails instead of a different framework, but we can’t reasonably say that we’re only going to work on Rails projects that use, for example, Minitest and MySQL and Angular and no other combination of technologies. We have to compromise a little or face extremely limited job options.
Also, it doesn’t matter much
Having said all that, I actually don’t believe your choice of which test framework to learn matters!
RSpec and Minitest differ syntactically but they don’t really have meaningful conceptual differences. The principles of testing are the same regardless of which test framework you’re using, or even which language you’re using for that matter.
You’re very unlikely to become an expert in Minitest and then get turned down for a job because they use RSpec there, or vice versa. Employers typically realize that if someone is skilled with testing, they’ll be able to pick up any test framework relatively easily.
So try both
In a sense it might sound depressing that the answer to the RSpec/Minitest question is a) we don’t have a choice and b) it doesn’t matter anyway. I actually find these facts freeing.
If the choice between RSpec and Minitest doesn’t matter that much then we’re free to evaluate both according to our own independent judgment and taste and not worry about whether we’re making the “right” choice. Whatever we choose, we’re likely to develop skills that will apply to any job, whether they use Minitest or RSpec there.
So my advice is to try both frameworks and see which one you like better. Neither one is objectively superior to the other.
But if you just want me to pick for you, I say RSpec
My very simplistic logic is that RSpec is what you’ll most likely be forced to use at work, so that’s what you might as well learn.
But again, I encourage you to try both and decide for yourself. This is ultimately not a very important decision. Learning testing principles is much more important than learning testing frameworks.
Wouldn’t you say people are migrating to minitest generally? I would argue that if your objective is to learn testing, minitest is all you need.
If that’s the case, I haven’t seen it.
Minitest with spec flavor is what I prefer but yeah when tests start to suck and slow you down it’s definitely not the test framework fault
I’m eager to learn more about testing and I started down the path with Minitest, but I’ve found that there are so many more resources for RSpec that it made sense to switch course. I hope to see more tutorials, books, and courses for Minitest in the future.
I’ve used both (a little–I’m no expert.) I like Minitest because it’s part of Ruby and has less magic. You can get spec-like syntax if that floats your boat.
As Jason has said, if you’re use Minitest well, and understand testing concepts well, no one is going to turn you down for a job because you have less experience with Rspec.