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"
Ответ 2
Я отвечу на это как ответ, потому что решение (из @mischa) похоронено в комментариях в ответ @marflar: попробуйте перезапустить Spork для решения этой проблемы.
Ответ 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.