From d4ff873441cad75e9dd6e7dd1dfccf532bb4febf Mon Sep 17 00:00:00 2001 From: justinko Date: Fri, 6 Aug 2010 07:17:11 -0500 Subject: [PATCH] Initial support for choosing webrat or capybara - wraps webrat and capybara includes in blocks that are only eval'd when either is loaded --- features/support/env.rb | 1 + lib/rspec/rails.rb | 10 +++++++--- lib/rspec/rails/browser_simulators.rb | 20 +++++++++++++++++++ lib/rspec/rails/example.rb | 2 +- .../rails/example/controller_example_group.rb | 11 ++++++++-- .../rails/example/helper_example_group.rb | 10 +++++++++- .../rails/example/mailer_example_group.rb | 10 +++++++++- .../rails/example/request_example_group.rb | 19 ++++++++++++++---- lib/rspec/rails/example/view_example_group.rb | 10 +++++++++- 9 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 lib/rspec/rails/browser_simulators.rb diff --git a/features/support/env.rb b/features/support/env.rb index ac23bc2d49..8d1629695c 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -1,4 +1,5 @@ require 'aruba' +require 'webrat' unless File.directory?('./tmp/example_app') system "rake generate:app generate:stuff" diff --git a/lib/rspec/rails.rb b/lib/rspec/rails.rb index 288707cdd2..d6cce470cc 100644 --- a/lib/rspec/rails.rb +++ b/lib/rspec/rails.rb @@ -1,4 +1,8 @@ -require 'webrat' +begin + require 'capybara' +rescue LoadError + require 'webrat' +end require 'rspec/core' require 'rspec/rails/extensions' @@ -8,5 +12,5 @@ require 'rspec/rails/fixture_support' require 'rspec/rails/mocks' require 'rspec/rails/module_inclusion' -require 'rspec/rails/example' - +require 'rspec/rails/browser_simulators' +require 'rspec/rails/example' \ No newline at end of file diff --git a/lib/rspec/rails/browser_simulators.rb b/lib/rspec/rails/browser_simulators.rb new file mode 100644 index 0000000000..71c749f94c --- /dev/null +++ b/lib/rspec/rails/browser_simulators.rb @@ -0,0 +1,20 @@ +module RSpec + module Rails + module BrowserSimulators + extend ActiveSupport::Concern + + def self.included(mod) + mod.instance_eval do + def webrat(&block) + block.call if defined?(Webrat) + end + + def capybara(&block) + block.call if defined?(Capybara) + end + end + end + + end + end +end \ No newline at end of file diff --git a/lib/rspec/rails/example.rb b/lib/rspec/rails/example.rb index b7659f2683..8955ff8375 100644 --- a/lib/rspec/rails/example.rb +++ b/lib/rspec/rails/example.rb @@ -5,4 +5,4 @@ require 'rspec/rails/example/view_example_group' require 'rspec/rails/example/mailer_example_group' require 'rspec/rails/example/routing_example_group' -require 'rspec/rails/example/model_example_group' +require 'rspec/rails/example/model_example_group' \ No newline at end of file diff --git a/lib/rspec/rails/example/controller_example_group.rb b/lib/rspec/rails/example/controller_example_group.rb index 667d90815e..dda81a8262 100644 --- a/lib/rspec/rails/example/controller_example_group.rb +++ b/lib/rspec/rails/example/controller_example_group.rb @@ -81,9 +81,16 @@ module ControllerExampleGroup include RSpec::Rails::Matchers::RedirectTo include RSpec::Rails::Matchers::RenderTemplate include RSpec::Rails::Matchers::RoutingMatchers + include RSpec::Rails::BrowserSimulators - include Webrat::Methods - include Webrat::Matchers + webrat do + include Webrat::Methods + include Webrat::Matchers + end + + capybara do + include Capybara + end # TODO (DC 7/31/2010) this is already included in RailsExampleGroup, but # due to some load order dependency problem between Webrat::Matchers and diff --git a/lib/rspec/rails/example/helper_example_group.rb b/lib/rspec/rails/example/helper_example_group.rb index 6438884fc8..e56ba45209 100644 --- a/lib/rspec/rails/example/helper_example_group.rb +++ b/lib/rspec/rails/example/helper_example_group.rb @@ -33,7 +33,15 @@ module HelperExampleGroup include ActionView::TestCase::Behavior include RSpec::Rails::ViewAssigns - include Webrat::Matchers + include RSpec::Rails::BrowserSimulators + + webrat do + include Webrat::Matchers + end + + capybara do + include Capybara + end module ClassMethods def determine_default_helper_class(ignore) diff --git a/lib/rspec/rails/example/mailer_example_group.rb b/lib/rspec/rails/example/mailer_example_group.rb index 0994022f21..939b47427d 100644 --- a/lib/rspec/rails/example/mailer_example_group.rb +++ b/lib/rspec/rails/example/mailer_example_group.rb @@ -7,7 +7,15 @@ module MailerExampleGroup include RSpec::Rails::RailsExampleGroup include ActionMailer::TestCase::Behavior - include Webrat::Matchers + include RSpec::Rails::BrowserSimulators + + webrat do + include Webrat::Matchers + end + + capybara do + include Capybara + end included do metadata[:type] = :mailer diff --git a/lib/rspec/rails/example/request_example_group.rb b/lib/rspec/rails/example/request_example_group.rb index 7e912f2e08..71b0b98ea8 100644 --- a/lib/rspec/rails/example/request_example_group.rb +++ b/lib/rspec/rails/example/request_example_group.rb @@ -19,8 +19,17 @@ module RequestExampleGroup include ActionDispatch::Integration::Runner include ActionDispatch::Assertions - include Webrat::Matchers - include Webrat::Methods + include RSpec::Rails::BrowserSimulators + + webrat do + include Webrat::Matchers + include Webrat::Methods + end + + capybara do + include Capybara + end + include RSpec::Rails::Matchers::RedirectTo include RSpec::Rails::Matchers::RenderTemplate include ActionController::TemplateAssertions @@ -42,8 +51,10 @@ def last_response @router = ::Rails.application.routes end - Webrat.configure do |config| - config.mode = :rack + webrat do + Webrat.configure do |config| + config.mode = :rack + end end end diff --git a/lib/rspec/rails/example/view_example_group.rb b/lib/rspec/rails/example/view_example_group.rb index 1eb8570292..357b654ad7 100644 --- a/lib/rspec/rails/example/view_example_group.rb +++ b/lib/rspec/rails/example/view_example_group.rb @@ -25,7 +25,15 @@ module ViewExampleGroup include ActionView::TestCase::Behavior include RSpec::Rails::ViewAssigns include RSpec::Rails::Matchers::RenderTemplate - include Webrat::Matchers + include RSpec::Rails::BrowserSimulators + + webrat do + include Webrat::Matchers + end + + capybara do + include Capybara + end module ClassMethods def _default_helper