Rspec 和命名路由 [英] Rspec and named routes

查看:37
本文介绍了Rspec 和命名路由的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 rails 很陌生,并试图遵循 railstutorial.一切正常,除了我的测试无法通过命名路由(5.3.3)

I'm quite new to rails, and trying to follow the railstutorial. Everything goes fine, except for my tests which can't get past the named routes (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):

My firsts tests (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 看起来像(没有所有注释的东西)

The spec_helper.rb looks like (without all the commented stuff)

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 得到的错误都是这样的:

The errors I get from rspec are all like this one :

 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 中,但它将我的错误更改为

in the spec_helper, but it changed my errors to

 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

我也尝试了不同的方式来重命名我的路线,但都没有奏效.我又回到教程版了.

I also tried different way of renaming my routes, but none of them worked. I'm back to the tutorial version.

如果它可以帮助您找出问题所在,我使用的是 Ubuntu 11.10,使用 rails 3.2.1 和 ruby​​ 1.9.2p290.希望你能帮忙,我花了很长时间在谷歌上搜索解决方案,但没有找到任何 ^^'

If it can be of any help in finding what exactly is a problem, I'm on Ubuntu 11.10, with rails 3.2.1 and ruby 1.9.2p290. Hope you can help, I spend quite a while googling for a solution and didn't find any ^^'

推荐答案

如果您将以下内容放在 rspec_helper.rb 中,命名路由应该可以工作:

Named routes should work if you put the following in rspec_helper.rb:

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

你是这样设置的吗?

这篇关于Rspec 和命名路由的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆