[rspec-users] Continuing a "specify" block after failure
David Chelimsky
dchelimsky at gmail.com
Mon Feb 26 15:22:20 EST 2007
On 2/26/07, leenoori <leenoori at quepica.com> wrote:
> I have some high-level acceptance tests that read a bunch of files,
> process them, and then confirm that the processed output matches the
> expected output. That is, for each file "a.input" I have a
> corresponding file "a.expected" and I basically want to churn through
> all of them producing "a.processed" and making sure that
> "a.processed" equals "a.expected"
>
> The way I currently have this is:
>
> context 'transforming files' do
> specify 'actual output should match expected output' do
> @files.each do |file|
> file.input.process.should == file.expected
> end
> end
> end
>
> The problem with this is that a failure on one file prevents all the
> others from being tested. What would be the "best practice" way to
> overcome this shortcoming?
>
> The solution I used with Test::Unit was to add an "ErrorCollector" as
> described here:
>
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/138320
>
> Basically it catches exceptions as they are raised, sending messages
> to the Test::Unit machinery so that the problems can be counted and
> reported, but continues processing.
>
> Would a similar technique be a good idea for RSpec? Or should I just
> restructure my specs? By that I mean something like the following
> (although not sure if it will work):
>
> context 'transforming files' do
> files.each do |file|
> specify 'actual output should match expected output' do
> file.input.process.should == file.expected
> end
> end
> end
IMO, since statements about each file could fail independently, then
each file wants its own specify block. So I would do it this way, with
the addition of something to separate out the spec names. For example
(possibly to verbose, but you get the idea):
context 'transforming files' do
files.each do |file|
specify "actual output should match expected output (#{file.inspect})" do
file.input.process.should == file.expected
end
end
end
Cheers,
David
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
More information about the rspec-users
mailing list