1. Useless, general words that bring no value:
# bad: what value? for what?
it "adds certain value"
# good
it "snoozes for an extra 5 minutes"
# bad: which result is correct?
it "returns correct result"
# good
it "returns user's initials"
# bad: how exactly it fails?
it "fails"
# good
it "raises a not found error"
# bad: formatted how?
it "returns formatted string"
# good
it "returns time in 24-hour format"
# bad: what 'ok' means?
it "is ok"
# good
it "creates draft invoices"
2. Implementation details:
# bad
it "changes @scheduled_on"
# good
it "reschedules campaign"
# bad
it "sets @todos"
# good
it "assigns todos to a given user"
3. Lies:
it "returns time in 24-hour format" do
expect(...).to eq "9:25"
end
it "strips leading zeroes" do
expect(foo(" 9:25 ")).to eq "9:25"
end
See also:
RSpec Style Guide
Better Specs
Top comments (2)
Would you be able to expand on what to write in these cases? RSpec is supposed to be very human-readable, so you make a lot of statements on what not to write. Could you explain why it's terrible to write #it statements like the exampled, and then explain what would be the better alternative and why? I like the idea of your post, just looking for the value you are trying to add. Seems like an angry tweet currently.
Sure, please have another look at the updated post:
dev.to/vasily/rspec-rails-what-not...
I also added further reading: Better Specs and RSpec Style Guide.
What do you think?
Oh, I'm sorry. I didn't mean to make it angry or preachy. I'm not a native speaker, so I tried to make it short in order to avoid spelling and grammar mistakes :-)