سؤال

I've been following along in the tutorial exactly as it has been written. So far everything has gone without a hitch, until this section.

I was supposed to change the "GET" statements in the config/routes.rb file to the following:

SampleApp::Application.routes.draw do
  root to: 'static_pages#home'

  match '/help',    to: 'static_pages#help'
  match '/about',   to: 'static_pages#about'
  match '/contact', to: 'static_pages#contact'

This was supposed to make the tests pass. They do not pass. They continue to fail with the following error as one of the 9 similar errors:

Failure/Error: visit about_path
NameError:
   undefined local variable or method 'about_path' ....

I have no idea how to get this to pass so that I can move on. What did I miss? What did Hartl miss? Other people who have asked this question never got an answer that made any sense or even worked when tried.

Before anyone asks:

All versions of Rails, Ruby and other installed components are the exact same versions used in the tutorial as it is written today 2012-10-05. Everything matches the tutorial perfectly.

UPDATE: Here is the current static_pages_spec.rb file

require 'spec_helper'

describe "Static pages" do

  describe "Home page" do

    it "should have the h1 'Sample App'" do
      visit root_path
      page.should have_selector('h1', text: 'Sample App')
    end

    it "should have the base title" do
      visit root_path
      page.should have_selector('title',
                        text: "Ruby on Rails Tutorial Sample App")
    end

    it "should not have a custom page title" do
      visit root_path
      page.should_not have_selector('title', text: '| Home')
    end
  end

  describe "Help page" do

    it "should have the h1 'Help'" do
      visit help_path
      page.should have_selector('h1', text: 'Help')
    end

    it "should have the title 'Help'" do
      visit help_path
      page.should have_selector('title',
                        text: "Ruby on Rails Tutorial Sample App | Help")
    end
  end

  describe "About page" do

    it "should have the h1 'About'" do
      visit about_path
      page.should have_selector('h1', text: 'About Us')
    end

    it "should have the title 'About Us'" do
      visit about_path
      page.should have_selector('title',
                    text: "Ruby on Rails Tutorial Sample App | About Us")
    end
  end

  describe "Contact page" do

    it "should have the h1 'Contact'" do
      visit contact_path
      page.should have_selector('h1', text: 'Contact')
    end

    it "should have the title 'Contact'" do
      visit contact_path
      page.should have_selector('title',
                    text: "Ruby on Rails Tutorial Sample App | Contact")
    end
  end
end

Rake Routes results:

   root  /                  static_pages#home
   help  /help(.:format)    static_pages#help
   about  /about(.:format)   static_pages#about
   contact  /contact(.:format) static_pages#contact
هل كانت مفيدة؟

المحلول

Try changing in your routes.rb your line to:

match '/about',   to: 'static_pages#about', as: 'about'

and also you should reload Spork in order to changes apply. You can also add:

load "#{Rails.root}/config/routes.rb"

into your Spork.each_run block in order to reload routes each time you run Spork.

نصائح أخرى

Reloading spork worked for me.

Hi try to add this on your spec.

describe "Static pages" do
include Rails.application.routes.url_helpers
.......

I think you should type in the browser

http://localhost:3000/

instead of http://localhost:3000/static_pages/home to get the home page for example. I think the problem is not the code but rather how to access the page. In the sections prior to 5.3.2 in the tutorial, you needed to visit localhost:3000/static_pages/home to access the homepage. After you follow instructions in 5.3.2, you only need to type http://localhost:3000/.

I just encountered this error, and had some help fixing this. I had mistakenly added the signin_path and signup_path on the layouts/_header.html.erb and static_pages/home.html.erb, respectively. This had EVERY page confused as to what the signin_path was.

The other issue I had made an error on was the root path. If you run 'rm public/index.html' from your sample app directory, 'root 'static_pages#home' in routes.rb, should work. The problem is that things in the public directory override any other part of your app as you customize it. Hope this helps you like it helped me :)

Named routes are not available in specs by default. Add the following code to the spec_helper.rb file:

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top