Undefined локальная переменная или метод `root_path 'Учебное пособие по Hartl Глава 5.3.2

Итак, мой первый вопрос о Stackoverflow..... =]

Мои тесты в главе 5.3.2 Michael Hartl RoR Tutorial не работают, когда в учебнике говорится, что он должен проходить (в учебнике говорится: about ',' contact 'и' help 'должны пройти... но все мои неудачи). Все до сих пор работало нормально, но я изменил

get 'static_pages/help' 

to

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

чтобы мой

конфиг /routes.rb

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' 

а потом все ушло в ад. Все мои тесты терпят неудачу с локальной переменной или методом undefined или методом "root_path" или "about_path" и т.д. (См. Ниже "Выход терминала" ). Но вот мои соответствующие файлы... На всякий случай кому-то интересно, все файлы - это именно то, что имеет Hartl. Я в основном копировал и вставлял содержимое каждого файла.

Может кто-нибудь мне помочь?????? Спасибо!

спецификации /static _pages_spec.rb

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

Выход терминала с вводом 'rspec spec/'

FFFFFFFFF

Failures:

  1) Static pages Contact page should have the h1 'Contact'
     Failure/Error: visit contact_path
     NameError:
       undefined local variable or method `contact_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_4:0x007fd2093855f8>
     # ./spec/requests/static_pages_spec.rb:55:in `block (3 levels) in <top (required)>'

  2) Static pages Contact page should have the title 'Contact'
     Failure/Error: visit contact_path
     NameError:
       undefined local variable or method `contact_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_4:0x007fd208cbeb20>
     # ./spec/requests/static_pages_spec.rb:60:in `block (3 levels) in <top (required)>'

  3) Static pages Help page should have the h1 'Help'
     Failure/Error: visit help_path
     NameError:
       undefined local variable or method `help_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x007fd2094c02b0>
     # ./spec/requests/static_pages_spec.rb:27:in `block (3 levels) in <top (required)>'

  4) Static pages Help page should have the title 'Help'
     Failure/Error: visit help_path
     NameError:
       undefined local variable or method `help_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x007fd209649208>
     # ./spec/requests/static_pages_spec.rb:32:in `block (3 levels) in <top (required)>'

  5) Static pages About page should have the h1 'About'
     Failure/Error: visit about_path
     NameError:
       undefined local variable or method `about_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_3:0x007fd208f16d00>
     # ./spec/requests/static_pages_spec.rb:41:in `block (3 levels) in <top (required)>'

  6) Static pages About page should have the title 'About Us'
     Failure/Error: visit about_path
     NameError:
       undefined local variable or method `about_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_3:0x007fd2094f7990>
     # ./spec/requests/static_pages_spec.rb:46:in `block (3 levels) in <top (required)>'

  7) Static pages Home page should not have a custom page title
     Failure/Error: visit root_path
     NameError:
       undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fd208d30b08>
     # ./spec/requests/static_pages_spec.rb:19:in `block (3 levels) in <top (required)>'

  8) Static pages Home page should have the base title
     Failure/Error: visit root_path
     NameError:
       undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fd208e0cb80>
     # ./spec/requests/static_pages_spec.rb:13:in `block (3 levels) in <top (required)>'

  9) Static pages Home page should have the h1 'Sample App'
     Failure/Error: visit root_path
     NameError:
       undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fd209607268>
     # ./spec/requests/static_pages_spec.rb:8:in `block (3 levels) in <top (required)>'

Finished in 0.30216 seconds
9 examples, 9 failures

Failed examples:

rspec ./spec/requests/static_pages_spec.rb:54 # Static pages Contact page should have the h1 'Contact'
rspec ./spec/requests/static_pages_spec.rb:59 # Static pages Contact page should have the title 'Contact'
rspec ./spec/requests/static_pages_spec.rb:26 # Static pages Help page should have the h1 'Help'
rspec ./spec/requests/static_pages_spec.rb:31 # Static pages Help page should have the title 'Help'
rspec ./spec/requests/static_pages_spec.rb:40 # Static pages About page should have the h1 'About'
rspec ./spec/requests/static_pages_spec.rb:45 # Static pages About page should have the title 'About Us'
rspec ./spec/requests/static_pages_spec.rb:18 # Static pages Home page should not have a custom page title
rspec ./spec/requests/static_pages_spec.rb:12 # Static pages Home page should have the base title
rspec ./spec/requests/static_pages_spec.rb:7 # Static pages Home page should have the h1 'Sample App'

Ответы

Ответ 1

Ответ на Mischa, надеюсь, устранит большинство из этих проблем, но ваши тесты могут по-прежнему терпеть неудачу в проблеме root_path.

Вы удалили index.html следующим образом: git rm public/index.html

И не забудьте внести изменения: git commit -am "Message"

Ответ 3

У меня такая же проблема в этой главе, просто измените config/routes.rb root на: 'static_pages # home' to root: to = > 'static_pages # home', и он начнет работу. вы также можете проверить все маршруты с помощью рейк-маршрутов.

Ответ 4

В своем Gemfile измените строку rspec-rails на:   gem 'rspec-rails', '2.12.0'

Эта версия rspec поддерживает подход, который Hartl использует в этой точке книги.

Ответ 5

  root :to => 'static_pages#home' 
  match '/help',    to: 'static_pages#help',    via: 'get'
  match '/about',   to: 'static_pages#about',   via: 'get'
  match '/contact', to: 'static_pages#contact', via: 'get'

работает для меня

результаты теста: 9 примеров 0 отказов

URL-адреса, похоже, изменились следующим образом:

http://localhost:3000/about

Ответ 6

Я использую тот же учебник и столкнулся с одной и той же проблемой! Возможно, вы подумали, что это была проблема, но это было не так. Причина, по которой это сработала, заключается в том, что вы пошли вперед и обновили Rspec в следующем разделе. Он работает только с обновленным rspec - старый rspec был причиной того, что ваши тесты не прошли. Сайт ошибочен тем, что он сообщает пользователям, что тесты пройдут, прежде чем также изменить Rspec

Ответ 7

У меня была аналогичная проблема. Мое исправление заключалось в том, чтобы включить следующую строку в spec_helper.rb

config.infer_spec_type_from_file_location!

Жесткие диски BTW:

gem 'rails', '4.1.5'
gem 'rspec-rails', '~> 3.0'

и я также удалил все вещи Guard и Spork.