From db16a190734e62cec455afcca705c977db00529d Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Wed, 7 Apr 2010 11:20:59 -0400 Subject: [PATCH] Add current_path to dsl --- README.rdoc | 4 ++++ lib/capybara/driver/base.rb | 4 ++++ lib/capybara/driver/rack_test_driver.rb | 6 +++--- lib/capybara/session.rb | 3 ++- lib/capybara/spec/driver.rb | 5 +++++ 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/README.rdoc b/README.rdoc index fb138c73..3c52a902 100644 --- a/README.rdoc +++ b/README.rdoc @@ -141,6 +141,10 @@ You can use the visit method to navigate to other pages: The visit method only takes a single parameter, the request method is *always* GET. +You can get the current path of the browsing session for test assertions: + + current_path.should == post_comments_path(post) + === Clicking links and buttons You can interact with the webapp by following links and buttons. Capybara diff --git a/lib/capybara/driver/base.rb b/lib/capybara/driver/base.rb index 3642a580..d898c82a 100644 --- a/lib/capybara/driver/base.rb +++ b/lib/capybara/driver/base.rb @@ -3,6 +3,10 @@ class Capybara::Driver::Base raise NotImplementedError end + def current_path + URI.parse(current_url).path + end + def visit(path) raise NotImplementedError end diff --git a/lib/capybara/driver/rack_test_driver.rb b/lib/capybara/driver/rack_test_driver.rb index 201a5ecb..f27bb4ca 100644 --- a/lib/capybara/driver/rack_test_driver.rb +++ b/lib/capybara/driver/rack_test_driver.rb @@ -191,7 +191,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base end def process(method, path, attributes = {}) - return if path.gsub(/^#{current_path}/, '') =~ /^#/ + return if path.gsub(/^#{request_path}/, '') =~ /^#/ send(method, path, attributes, env) follow_redirects! end @@ -205,7 +205,7 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base end def submit(method, path, attributes) - path = current_path if not path or path.empty? + path = request_path if not path or path.empty? send(method, path, attributes, env) follow_redirects! end @@ -239,7 +239,7 @@ private Rack::MockSession.new(app, Capybara.default_host || "www.example.com") end - def current_path + def request_path request.path rescue "" end diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index dfbc8e52..fd218516 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -12,7 +12,7 @@ module Capybara :has_no_content?, :has_no_css?, :has_no_xpath?, :has_xpath?, :locate, :save_and_open_page, :select, :source, :uncheck, :visit, :wait_until, :within, :within_fieldset, :within_table, :within_frame, :has_link?, :has_no_link?, :has_button?, :has_no_button?, :has_field?, :has_no_field?, :has_checked_field?, :has_unchecked_field?, :has_no_table?, :has_table?, - :unselect, :has_select?, :has_no_select? + :unselect, :has_select?, :has_no_select?, :current_path ] attr_reader :mode, :app @@ -34,6 +34,7 @@ module Capybara def_delegator :driver, :cleanup! def_delegator :driver, :current_url + def_delegator :driver, :current_path def_delegator :driver, :response_headers def_delegator :driver, :visit def_delegator :driver, :body diff --git a/lib/capybara/spec/driver.rb b/lib/capybara/spec/driver.rb index 1a0eb326..e7b634af 100644 --- a/lib/capybara/spec/driver.rb +++ b/lib/capybara/spec/driver.rb @@ -18,6 +18,11 @@ shared_examples_for 'driver' do @driver.visit('/foo') @driver.current_url.should include('/foo') end + + it 'should show the correct location' do + @driver.visit('/foo') + @driver.current_path.should == '/foo' + end end describe '#body' do