DEV Community

Vasily Polovnyov
Vasily Polovnyov

Posted on Edited on

RSpec & Rails: what not to write in `it`

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"
Enter fullscreen mode Exit fullscreen mode

2. Implementation details:

# bad
it "changes @scheduled_on"

# good
it "reschedules campaign"


# bad
it "sets @todos"

# good
it "assigns todos to a given user"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

See also:
RSpec Style Guide
Better Specs

Top comments (2)

Collapse
 
rjrobinson profile image
R.J. Robinson •

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.

Collapse
 
vasily profile image
Vasily Polovnyov •

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?

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?

I like the idea of your post, just looking for the value you are trying to add. Seems like an angry tweet currently.

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 :-)