On Sun, Sep 20, 2009 at 9:34 PM, nruth <[email protected]> wrote:
>
> We're using a describe (or context) block to name (or document) a
> state, then using a separate before block to set up that state
> (context). If that before block were to go astray the documentation
> would cease to be correct.
On further reading and thinking, I think I might see some of the
confusion. You're not quite correct that the describe and the before
are "separate blocks." The before block lives *inside* the describe
block, and composes part of what is described.
The describe block is more than "documentation." It's a class
definition. (Literally.) Class definitions do more than just provide
names; they bundle up behavior. The before block can (not literally,
but effectively) be considered as a sort of constructor method for the
class, similar to 'def initialize' in a non-RSpec class but with more
chaining built in. Nested example groups are subclasses that invoke
the superclasses's constructors automatically, etc.
This is all very clean, mostly traditional object-oriented language
behavior. Your suggestion of putting the initializer as a block value
to a hash option is more complicated; it's like saying normal Ruby
classes should not have an 'initialize' method, but instead should be
declared like 'class Foo :constructor => lambda{initializer code
here}'. Ruby's insistence that you should call 'new' but implement
'initialize' is confusing enough. The lambda-option style doesn't
make it clearer.
Does that make sense? "Describe" and "before" aren't disconnected
entities. They're body and organ. One is a part of the other.
--
Have Fun,
Steve Eley ([email protected])
ESCAPE POD - The Science Fiction Podcast Magazine
http://www.escapepod.org
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users