[rspec-users] Continuing a "specify" block after failure

leenoori leenoori at quepica.com
Mon Feb 26 13:45:04 EST 2007


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



More information about the rspec-users mailing list