Style issue

In one of my features I have to check to see if a file is created by an
external script and then determine if that file contains specific
information. So, I ended up with these step definitions:

When /currency exchange rate transfer file should contain rates/ do
found = false
fx_code = ‘USD’
File.open(FOREX_XFR_FN).each do |line|
found = true if
/.*fx_target#{fx_code}.fx_rate(\d+.\d{4})./.match(line)
break if found
end
fail(ArgumentError, “Exchange Rate not found for #{fx_code}”) if not
found
end

When /currency exchange rate transfer file should exist/ do
File.open(FOREX_XFR_FN)
end

These work well enough. What I want to know if this is considered a
normal style for testing this sort of specification and if not then what
is?

On Thu, Apr 23, 2009 at 12:05 PM, James B. [email protected]
wrote:

end
I find this more straighforward and easy to understand:

When /currency exchange rate transfer file should contain rates/ do
fx_code = ‘USD’
File.open(FOREX_XFR_FN).each do |line|
return true if
/.*fx_target#{fx_code}.fx_rate(\d+.\d{4})./.match(line)
end
fail(ArgumentError, “Exchange Rate not found for #{fx_code}”)
end

///ark

Mark W. wrote:

I find this more straighforward and easy to understand:

When /currency exchange rate transfer file should contain rates/ do
fx_code = ‘USD’
File.open(FOREX_XFR_FN).each do |line|
return true if
/.*fx_target#{fx_code}.fx_rate(\d+.\d{4})./.match(line)
end
fail(ArgumentError, “Exchange Rate not found for #{fx_code}”)
end

///ark

If I do a return from inside the iterator then I get a jump error. It
has to be break, which is how I ended up with what I did.

On Thu, Apr 23, 2009 at 1:18 PM, James B. [email protected]
wrote:

fail(ArgumentError, “Exchange Rate not found for #{fx_code}”)
end

///ark

If I do a return from inside the iterator then I get a jump error. It
has to be break, which is how I ended up with what I did.

Oh, right. I believe this behavior is changing in Ruby 1.9.

///ark

On Thu, Apr 23, 2009 at 3:59 PM, Mark W. [email protected] wrote:

fail(ArgumentError, “Exchange Rate not found for #{fx_code}”) if not
end
fail(ArgumentError, “Exchange Rate not found for #{fx_code}”)
end

I’d even vote for the more concise form:

When /currency exchange rate transfer file should contain rates/ do
fx_code = ‘USD’
IO.readlines(FOREX_XFR_FN).any?{ |line|
line.match /.*fx_target#{fx_code}.fx_rate(\d+.\d{4})./
} || fail ArgumentError, “Exchange Rate not found for #{fx_code}”
unless found
end

///ark


rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users


Zach D.
http://www.continuousthinking.com (personal)
http://www.mutuallyhuman.com (hire me)
@zachdennis (twitter)

On Thu, Apr 23, 2009 at 8:11 PM, Zach D. [email protected]
wrote:

end
/.*fx_target#{fx_code}.fx_rate(\d+.\d{4})./.match(line)
} || fail ArgumentError, “Exchange Rate not found for #{fx_code}” unless found
end

Whoops, make that…

When /currency exchange rate transfer file should contain rates/ do
fx_code = ‘USD’
IO.readlines(FOREX_XFR_FN).any?{ |line|
line.match /.*fx_target#{fx_code}.fx_rate(\d+.\d{4})./
} || fail(ArgumentError, “Exchange Rate not found for #{fx_code}”)
end


Zach D.
http://www.continuousthinking.com (personal)
http://www.mutuallyhuman.com (hire me)
@zachdennis (twitter)


Zach D.
http://www.continuousthinking.com (personal)
http://www.mutuallyhuman.com (hire me)
@zachdennis (twitter)

Matt W. wrote:

Slightly off-topic, but it seems a bit weird to have the word ‘should’
in a When step to me. Are these really Then steps?

Actually, all of my step definitions are always Thens. This one is a
cut & paste artifact that I overlooked.

On 23 Apr 2009, at 20:05, James B. wrote:

found = true if

These work well enough. What I want to know if this is considered a
normal style for testing this sort of specification and if not then
what
is?

Slightly off-topic, but it seems a bit weird to have the word ‘should’
in a When step to me. Are these really Then steps?

Matt W.

http://blog.mattwynne.net