On Jun 30, 2010, at 9:29 AM, Marcos Chicote wrote:

> On Wed, Jun 30, 2010 at 11:12 AM, David Chelimsky <dchelim...@gmail.com> 
> wrote:
> On Jun 30, 2010, at 9:05 AM, Marcos Chicote <totochic...@gmail.com> wrote:
> 
>> I don't think so, but I don't really know how to check it programatically.
>> I don't mean exceptions in before/after methos, but inside it() method
>> 
>> I would like to write something like this:
>> after(:each) do
>> if exception_occured_on_it_method?
>> do_something
>> end
>> end
>> 
>> Is that possible?
> 
> What problem are you trying to solve?
> 
> I'm using rspec to build tests using Watir.
> 
> On before(:each), I create the browser instance and login lazily to a web 
> page (if the browser exists, I use that instance, if it does not, I create a 
> new one). I'm using this lazy approach in order to save the time of openning 
> a new browser and login for each test (I could close the browser on 
> after(:each) but this is faster).
> 
> I most cases (when test are passed), everything works great. The problem is 
> that sometimes the page I'm trying to access doesn't load (or there is some 
> other non functional problem), the browser keeps wating and an timer that I 
> implemented timesout.This timeout raises an exception that makes the test 
> fail, but does not close the browsers windows (that keeps wating for the 
> response), making following tests to fail. 
> 
> If I could handle timeout exception in the way I posted before, I could close 
> the browser and the next test will open a fresh one.
> 
> (Note: this is only and example, there are some other exceptions thay might 
> occur, html element missing for example, that I want to handle the same way 
> and that's why I need a unified mechanism)

There's nothing in RSpec to explicitly handle this for you. There are tools 
that will likely be available in RSpec-2 by the time we do a final release, but 
they won't work yet for your goal, so for the short run I think you need to 
manage this in each example manually. I'd recommend something like:

def capture(exception)
  begin
    yield
  rescue Exception => e
    case e
    if OneType
      # do something
    elsif AnotherType
      # do something different
    end
  end
end

it "..." do
  capture do
    # do stuff
  end
end

It's not perfect, but it should work.

HTH,
David
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to