Failing "layout_links_spec" integration tests during Ruby on Rails Tutorial
I am following the Ruby on Rails Tutorial for Rails 3, located here:
http://ruby.railstutorial.org
I am at this section of the tutorial:
http://ruby.railstutorial.org/chapters/filling-in-the-layout#sec:integration_tests
All of my pages render as expected at this point; e.g., I can hit http://localhost:3000/about
and see the about page of the sample application, with the expected title ("Ruby on Rails Tutorial Sample App | About"). Yet the integration tests from this section keep failing.
Here is my layout_links_spec.rb:
require 'spec_helper'
describe "LayoutLinks" do
it "should have a Home page at '/'" do
get '/'
response should have_selector('title', :content => "Home")
end
it "should have a Contact page at '/contact'" do
get '/contact'
response should have_selector('title', :content => "Contact")
end
it "should have an About page at '/about'" do
get '/about'
response should have_selector('title', :content => "About")
end
it "should have a Help page at '/help'" do
get '/help'
response should have_selector('title', :content => "Help")
end
end
When I run tests with rspec spec/
or via autotest
, I get the following test failures:
........FFFF
Failures:
1) LayoutLinks should have a Home page at '/'
Failure/Error: response should have_selector('title', :content => "Home")
expected following output to contain a <title>Home</title> tag:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>LayoutLinks</p></body></html>
开发者_运维知识库# ./spec/requests/layout_links_spec.rb:7:in `block (2 levels) in <top (required)>'
2) LayoutLinks should have a Contact page at '/contact'
Failure/Error: response should have_selector('title', :content => "Contact")
expected following output to contain a <title>Contact</title> tag:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>LayoutLinks</p></body></html>
# ./spec/requests/layout_links_spec.rb:12:in `block (2 levels) in <top (required)>'
3) LayoutLinks should have an About page at '/about'
Failure/Error: response should have_selector('title', :content => "About")
expected following output to contain a <title>About</title> tag:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>LayoutLinks</p></body></html>
# ./spec/requests/layout_links_spec.rb:17:in `block (2 levels) in <top (required)>'
4) LayoutLinks should have a Help page at '/help'
Failure/Error: response should have_selector('title', :content => "Help")
expected following output to contain a <title>Help</title> tag:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>LayoutLinks</p></body></html>
# ./spec/requests/layout_links_spec.rb:22:in `block (2 levels) in <top (required)>'
Finished in 0.23497 seconds
12 examples, 4 failures
Failed examples:
rspec ./spec/requests/layout_links_spec.rb:5 # LayoutLinks should have a Home page at '/'
rspec ./spec/requests/layout_links_spec.rb:10 # LayoutLinks should have a Contact page at '/contact'
rspec ./spec/requests/layout_links_spec.rb:15 # LayoutLinks should have an About page at '/about'
rspec ./spec/requests/layout_links_spec.rb:20 # LayoutLinks should have a Help page at '/help'
...note that the response shown in the test failures appears to indicate that I'm getting a mock/stubbed response. I believe that this is my issue, but I don't know why it is happening.
Finally, here is my environment:
Gatito:sample_app abrown$ gem list
*** LOCAL GEMS ***
abstract (1.0.0)
actionmailer (3.0.9)
actionpack (3.0.9)
activemodel (3.0.9)
activerecord (3.0.9)
activeresource (3.0.9)
activesupport (3.0.9)
arel (2.0.10)
autotest (4.4.6)
autotest-fsevent (0.2.4)
autotest-growl (0.2.9)
autotest-rails-pure (4.1.2)
builder (2.1.2)
bundler (1.0.15)
configuration (1.2.0)
diff-lcs (1.1.2)
erubis (2.6.6)
heroku (2.3.3)
i18n (0.5.0)
launchy (0.4.0)
mail (2.2.19)
mime-types (1.16)
nokogiri (1.4.6)
polyglot (0.3.1)
rack (1.2.3)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.9)
railties (3.0.9)
rake (0.9.2, 0.8.7)
rdoc (3.6.1)
rest-client (1.6.3)
rspec (2.6.0)
rspec-core (2.6.4)
rspec-expectations (2.6.0)
rspec-mocks (2.6.0)
rspec-rails (2.6.1)
sequel (3.20.0)
sinatra (1.0)
spork (0.9.0.rc8)
sqlite3 (1.3.3)
sqlite3-ruby (1.3.3)
sys-uname (0.8.5)
taps (0.3.23)
term-ansicolor (1.0.5)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.28)
webrat (0.7.1)
ZenTest (4.5.0)
I figured it out. I typed in the tests above myself. When I re-copied/pasted the tests directly from the tutorial, they began passing. I was mystified, as everything looked identical at a glance. But after running a diff
, I realized that for each test, I had typed:
response should
...but that I should have typed:
# Note the "."
response.should
After making this correction to each test, they all pass as expected.
I've experienced the exact same error, but the cause was forgetting to include render_views
line in the test:
require 'spec_helper'
describe PagesController do
render_views
describe "GET 'home'" do
it "should be successful" do
get 'home'
response.should be_success
end
end
精彩评论