Long post but prolly simple if you understand Rails, RSpec &
differences between webrat & capybara.
I’m hoping someone can take a few moments to help me get a better
understanding of my environment. I have a somewhat intermediate
understanding of Ruby/Rails but a beginner’s understanding of RSpec. I
have purchased The RSpec Book and, though helpful, leaves me with more
questions…probably from the very beginning I missed some basic
points…as just understanding HOW the environment is set up, WHERE/
WHY it looks for files to test and WHAT matchers, etc. are available
in tests is confusing me.
Anyway, in trying to wrap my head around RSpec I created a simple
Rails3 project. Altered the Gemfile to:
group :development, :test do
gem ‘rspec-rails’
gem ‘webrat’
gem ‘haml-rails’
gem ‘sass’
gem ‘spork’, ‘~> 0.9.0.rc’
end
group :test do
gem ‘rspec’
end
Generated some scaffolding and starting making and editing some
specs… I was happy!
Now, after some stability and growing confidence I decided I’d try to
swap out webrat and replace it with capybara (which I’ve heard good
things about especially when dealing with javascript tests). So I
commented out “# gem ‘webrat’” and
-
added:
gem ‘capybara’, :git => ‘git://github.com/jnicklas/capybara.git’
gem ‘launchy’
gem ‘database_cleaner’ -
added/modified what seems like alot of requires to spec_helper.rb
(spork, rubygems, rspec/rails, capybara/rspec, capybara/rails,
database_cleaner). -
changed some of my matchers from, what I think came from, webrat to,
what I think works with, Capybara…but I’m getting failures in my
controller & view specs. I’d really love to understand WHY and HOW/
WHERE to look so in the future I can diagnose these errors myself.
VIEW SPEC:
spec/view/pages/about.html.haml_spec.rb
require ‘spec_helper’
describe “pages/about.html.haml” do
it “should have the right heading” do
render # <- worked with webrat
rendered.should have_selector(“h2”, :content => “About Us”)
visit pages_about_path
page.should have_selector(‘h2’)
end
end
Failures:
pages/about.html.haml should have the right heading
Failure/Error: visit pages_about_path
NoMethodError:
undefined method `visit’ for
#RSpec::Core::ExampleGroup::Nested_7:0x0000010320a568
CONTROLLER SPEC:
spec/controllers/pages_controller_spec.rb
require ‘spec_helper’
describe PagesController do
describe “GET ‘about’” do
it “should be successful” do
# get ‘about’ # <- worked with webrat
# response.should be_success # <- webrat ok
visit pages_about_path
# visit ‘/pages/about.html’ # <- also fails w/capybara
page.should have_content(‘About Us’)
# page.html.should match(/About/i) # no help
# page.should match(/About/i) # no help
end
end
Failures:
- PagesController GET ‘about’ should be successful
Failure/Error: visit pages_about_path
LoadError:
no such file to load – action_controller/integration./spec/controllers/pages_controller_spec.rb:10:in `block (3
levels) in <top (required)>’