Подтвердить что ты не робот

Rspec и названные маршруты

Я новичок в рельсах и стараюсь следовать руководству. Все идет хорошо, за исключением моих тестов, которые не могут пройти по названным маршрутам (5.3.3)

Мои маршруты .rb:

 SampleApp::Application.routes.draw do

 resources :users
 match '/signup',  to: 'users#new'

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

 root to: 'static_pages#home'

 #Commented stuff

Мои первые тесты (spec/controllers/static_pages_controller_spec.rb):

describe "Static pages" do

subject { page }

shared_examples_for "all static pages" do
  it { should have_selector('h1',    text: heading) }
  it { should have_selector('title', text: full_title(page_title)) }
end

describe "Home page" do
  before { visit root_path }
  let(:heading)    { 'Sample App' }
  let(:page_title) { 'Home' }

  it_should_behave_like "all static pages"
end

#Other tests

Spec_helper.rb выглядит (без всех комментариев)

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
    config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = true
    config.infer_base_class_for_anonymous_controllers = false
end

Ошибки, которые я получаю от rspec, похожи на следующие:

 Static pages Home page it should behave like all static pages 
 Failure/Error: before { visit root_path }
 NameError:
   undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1::Nested_1:0x00000004a12210>
 Shared Example Group: "all static pages" called from ./spec/controllers/static_pages_controller_spec.rb:17
 # ./spec/controllers/static_pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

Я уже пробовал использовать

 include Rails.application.routes.url_helpers

в spec_helper, но он изменил мои ошибки на

 Static pages Home page it should behave like all static pages 
 Failure/Error: Unable to find matching line from backtrace
 SystemStackError:
   stack level too deep
 # /usr/lib/ruby/1.9.1/forwardable.rb:185

Я также пробовал другой способ переименования моих маршрутов, но никто из них не работал. Я вернусь к учебной версии.

Если это может помочь в поиске того, что конкретно является проблемой, я на Ubuntu 11.10, с рельсами 3.2.1 и ruby ​​1.9.2p290. Надеюсь, что вы можете помочь, я трачу довольно долгое время на поиски решения и не нашел никаких ^^ '

4b9b3361

Ответ 1

Именованные маршруты должны работать, если вы поместите следующее в rspec_helper.rb:

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
  ...
end

Как вы его настроили?

Ответ 2

в rspec_helper.rb:

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
  ...
end

Ответ 3

Google привел меня сюда, даже мое сообщение об ошибке не соответствует 100%.

В моем случае команда Capybara visit неизвестна...

Ошибка:

NoMethodError:
       undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xa49a73c>

Так как Capybara 2.0 нужно использовать папку spec/features, команды capybara больше не работают в папке spec/requests.

Это помогло мне: http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

Надеюсь, вы найдете это полезным.

Ответ 4

Я не думаю, что у вас есть доступ к именованным маршрутам внутри ваших спецификаций контроллера rspec. Однако вы можете просто посетить ('/'), что эквивалентно корневому пути.

Ответ 5

Вы должны были использовать

rails generate rspec:install

вместо

rspec --init

и вам не пришлось бы изменять конфигурационный файл.

Не делайте этого сейчас, хотя ваше приложение сломается, и вам придется потратить больше времени на выяснение, почему он сломался.

Ответ 6

У меня была та же проблема, с тем же учебником. Оказывается, мне нужно было просто перезапустить службу Spork, и все сработало хорошо.

Решение, отправленное Tom L, работало для меня, но когда я удалил эту строку и перезапустил Spork, это также устранило проблему.

Надеюсь, что это поможет другим людям, которые опасаются отклонения от кода учебника!