On Tue, Jul 7, 2009 at 10:35 AM, Chris
Sund<[email protected]> wrote:
> Hey Everyone,
>
> I've been working my way through the Rspec book trying to absorb and
> understand everything. This is my first time with BDD and I'm just
> trying to figure out some simple syntax stuff. My questions revolve
> around some of the syntaxing used in the book. These are really simple
> questions.
Hey Chris,
The book assumes a basic working knowledge of Ruby. The questions you
are asking are about Ruby, not about RSpec or Cucumber. I'll answer
them for you here, but I don't think this is appropriate or necessary
for the book itself.
> 1.) Given /^the secret code is (. . . .)$/ do |code|
> Is (. . . .) simply a place holder? could I use something like
> (- - - -) instead, or does it actually mean something?
The argument to Given is a regular expression. The "." means "any
character", so (. . . .) means any four characters with spaces in
between. There are certainly more specific and fool-proof ways we
could express this, but this is a very simple way, and works just fine
in the context of a cucumber step definition.
> 2.) Then /^the mark should be (.*)$/ do |mark|
> Similar question....what does .* represent?
The "." means any character and the "*" means any number of times.
> 3.) In the following example why don't I pass |guess| to the When
> statement? I'm sure it has something to do with the (code.split)
> syntax, I'm just not sure what.
>
> When /^I guess (. . . .)$/ do |code|
> @game.guess(code.split)
> end
You're correct - code.split converts "r y g c" to ['r', 'y', 'g',
'c'], which is what the game wants to receive (an array, rather than a
string).
> 4.) And finally what does ("\n") do?
>
> Then /^the mark should be (.*)$/ do |mark|
> �[email protected]("\n").should include(mark)
> end
The @messenger is a StringIO object. It receives puts() statements and
adds them to it's string attribute with a line break ("\n") at the end
so if you do this:
@messenger.puts "a"
@messenger.puts "b"
Then the result of @messenger.string is "a\nb\n"
Splitting that on "\n" results in ["a","b"], which allows you to ask
if that result includes "a", for example:
@messenger.split("\n").include?("a")
Which can be expressed as an expectation in RSpec like this:
@messenger.split("\n").should include("a")
HTH,
David
>
>
>
>
>
> Thank You!
>
> Chris
> _______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users