$ rspec ~/insane-magic.spec
F
Failures:
1) Rspec should not allow you to make shit up
Failure/Error: [1, 2, 3].should have(4).potatoes
expected 4 potatoes, got 3
# /Users/graham/insane-magic.spec:5
Finished in 0.00042 seconds
1 example, 1 failure
Do you see the potatoes
method call? Why isn't Ruby complaining that
it doesn't exist? Where the hell did it come from? Is it part of rspec?
It must be, surely. That's the only library I've required!
[Goes off to grep the rspec gems for "potatoes"... doesn't find it]
What's happening here? RSpec is purposefully ignoring .potatoes
, which
is a method call on the object returned by #have
. And what is that
object, exactly?
So RSpec (and this "BDD" business) is good for people new to testing you say? Really?
The "call any method you like and we'll silently ignore it" behaviour is not syntactic sugar, it's pain and confusion for people who are new to programming. It's a bloody daft idea to put it forward as good practice in a widely popular library.
Some bad ideas catch on just as easily as good ideas, and this approach is its own special breed of footgun.
To be clear, I like describe
and it
. But you can stop there; I feel
RSpec's features have a negative impact on productivity from there on
in.
And for comparison, the Contest gem adds support for these blocks to test/unit in 100 lines of code.
Grep failure on new dev confusion applies to every library that uses method_missing. ActiveRecord is right up there. During my Ruby learning curve, this confusion you state applied (and still applies, until you learn the idioms/fashions (delete according to mood)) to way more than RSpec.