Rspec和命名路由
我对rails非常陌生,并试图遵循railstutorial。 一切顺利,除了我的测试无法通过命名路线(5.3.3)
我的routes.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 # 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 '
我已经尝试过了
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上,使用rails 3.2.1和ruby 1.9.2p290。 希望你能帮忙,我花了一段时间谷歌搜索解决方案,没有发现任何^^’
如果将以下内容放在rspec_helper.rb中,则命名路由应该有效:
RSpec.configure do |config| config.include Rails.application.routes.url_helpers ... end
你是这样设置的吗?
在rspec_helper.rb中:
RSpec.configure do |config| config.include Rails.application.routes.url_helpers ... end
谷歌把我带到这里,即使我的错误信息不适合100%。
在我的情况下,Capybara命令visit
未知……
错误:
NoMethodError: undefined method `visit' for #
由于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
希望你觉得这很有用。
我认为您无法访问rspec控制器规范中的命名路由。 但是你可以访问(’/’),这相当于root_path。
我有同样的问题,使用相同的教程。 事实certificate,我需要重新启动Spork服务,一切正常。
Tom L发布的解决方案为我工作,但当我删除该行并重新启动Spork时,这也解决了问题。
希望能帮助其他任何对偏离教程代码保持警惕的人!
你应该用过
rails generate rspec:install
代替
rspec --init
你不必修改配置文件。
现在不要这样做,或者你的应用程序会中断,你将不得不浪费更多的时间来弄清楚它为什么会破坏。