I'm having a frustrating time with Rspec while working through the Ruby on Rails Learn by Example tutorial on 5.2.
I'm currently trying to test my routing using rspec and the tests always comes back as a failure even though I followed the steps in the tutorial correctly to the best of my knowledge and have verified that the routing works by manually checking and testing the routing myself.
For example, the layout_links_spec.rb looks like this:
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'
reponse.should have_selector('title', :content => "Help")
end
end
And my routes looks like:
SampleApp::Application.routes.draw do
match '/contact', :to => 'pages#contact'
match '/about', :to => 'pages#about'
match '/help', :to => 'pages#help'
get "pages/home"
get "pages/contact"
get "pages/about"
get "pages/help"
root :to => 'pages#home'
end
Rspec returns this failure:
5) LayoutLinks should have a Home page at '/'
Failure/Error: get '/'
ActionController::RoutingError:
No route matches [GET] "/"
# ./spec/requests/layout_links_spec.rb:6:in `block (2 levels) in <top (required)>'
6) LayoutLinks should have a Contact page at '/contact'
Failure/Error: get '/contact'
ActionController::RoutingError:
No route matches [GET] "/contact"
# ./spec/requests/layout_links_spec.rb:11:in `block (2 levels) in <top (required)>'
7) LayoutLinks should have an About page at '/about'
Failure/Error: get '/about'
ActionController::RoutingError:
No route matches [GET] "/about"
# ./spec/requests/layout_links_spec.rb:16:in `block (2 levels) in <top (required)>'
8) LayoutLinks should have a Help Page at '/help'
Failure/Error: get '/help'
ActionController::RoutingError:
No route matches [GET] "/help"
# ./spec/requests/layout_links_spec.rb:21:in `block (2 levels) in <top (required)>'
I get a similar error with my pages_controller_spec.rb tests as well
describe "GET 'home'" do
it "should be successful" do
get 'home'
response.should be_success
end
Gets this rspec error:
1) PagesController GET 'home' should be successful
Failure/Error: get 'home'
ActionView::Template::Error:
undefined local variable or method `root_path' for #<#<Class:0x00000103e8b210>:0x00000103e87de0>
# ./app/views/layouts/_header.html.erb:3:in `_app_views_layouts__header_html_erb__1560745193027372362_2179584160'
# ./app/views/layouts/application.html.erb:10:in `_app_views_layouts_application_html_erb__2627526215404316040_2176993080'
# ./spec/controllers/pages_controller_spec.rb:15:in `block (3 levels) in <top (required)>'
I checked my code with the tutorial and it looks right. If I type in the url localhost:3000/home or /about etc, I get to the correct page which indicates that it must be routed correctly. I could just go forward with the tutorial, but I'd like to learn how to do TDD and use rspec in practice but I feel like I can't rely on rspec to do this...