On Wed, Jun 30, 2010 at 12:31 PM, David Chelimsky <dchelim...@gmail.com>wrote:
> 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 > > Thanks David. I'm looking forward to RSpec-2. Is there an estimate on the release date?
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users