Skip to content

Commit

Permalink
raise an error if Capybara is stuck in time
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonas Nicklas and Nicklas Ramhöj committed Aug 15, 2011
1 parent b056efb commit aaf2f44
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/capybara.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
module Capybara
class CapybaraError < StandardError; end
class DriverNotFoundError < CapybaraError; end
class FrozenInTime < CapybaraError; end
class ElementNotFound < CapybaraError; end
class ExpectationNotMet < ElementNotFound; end
class FileNotFound < CapybaraError; end
Expand Down
1 change: 1 addition & 0 deletions lib/capybara/node/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def wait_until(seconds=Capybara.default_wait_time)
raise e unless (driver.respond_to?(:invalid_element_errors) and driver.invalid_element_errors.include?(e.class)) or e.is_a?(Capybara::ElementNotFound)
raise e if (Time.now - start_time) >= seconds
sleep(0.05)
raise Capybara::FrozenInTime, "time appears to be frozen, Capybara does not work with libraries which freeze time, consider using time travelling instead" if Time.now == start_time
reload if Capybara.automatic_reload
retry
end
Expand Down
9 changes: 9 additions & 0 deletions lib/capybara/spec/session/javascript.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,15 @@
@session.click_link('Click me')
@session.find(:css, "a#has-been-clicked").text.should include('Has been clicked')
end

context "with frozen time" do
it "raises an error suggesting that Capybara is stuck in time" do
@session.visit('/with_js')
now = Time.now
Time.stub(:now).and_return(now)
expect { @session.find('//isnotthere') }.to raise_error(Capybara::FrozenInTime)
end
end
end

describe '#wait_until' do
Expand Down

0 comments on commit aaf2f44

Please sign in to comment.