2012-02-28 28 views
24

Tôi khá mới để làm đường ray và cố gắng đi theo đường ray. Mọi thứ diễn ra tốt đẹp, ngoại trừ cho các bài kiểm tra của tôi mà không thể vượt qua các tuyến đường được đặt tên (5.3.3)Rspec và các tuyến đường được đặt tên

routes.rb của tôi:

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 

tôi kiểm tra cái đầu tiên (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 

các spec_helper.rb trông giống như (không có tất cả những thứ bình luận)

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 

Các lỗi tôi nhận được từ rspec đều như thế này:

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)>' 

Tôi đã cố gắng sử dụng

include Rails.application.routes.url_helpers 

trong spec_helper, nhưng nó đã thay đổi lỗi của tôi để

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 

Tôi cũng đã thử cách khác để đổi tên các tuyến đường của mình, nhưng không ai trong số họ làm việc. Tôi quay lại phiên bản hướng dẫn.

Nếu có thể có bất kỳ trợ giúp nào trong việc tìm ra chính xác vấn đề gì, tôi đang sử dụng Ubuntu 11.10, với đường ray 3.2.1 và ruby ​​1.9.2p290. Hy vọng bạn có thể giúp đỡ, tôi dành khá nhiều thời gian cho một giải pháp và không tìm thấy bất kỳ^^ '

Trả lời

101

tuyến đường được đặt tên nên làm việc nếu bạn đặt sau đây trong rspec_helper.rb:

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

Có phải đó là cách bạn cài đặt nó?

+0

Đó là chính xác những gì tôi đã làm, ngoại trừ 'cấu hình'. phần. Tất cả mọi thứ hoạt động hoàn hảo ngay bây giờ! Cảm ơn rất nhiều ! – FabPelletier

+7

Trong trường hợp bất cứ ai làm cho nó xa và vẫn còn stumped, nó cũng đáng chú ý là root_path (vv) chỉ hoạt động trong khối "do ... end" của một "nó" phần trong một "mô tả" khối của các bài kiểm tra RSpec . Vì vậy, nếu bạn đã tạo ra các hàm để xử lý các phần "nó" dựa trên tham số đường dẫn được truyền cho hàm, bạn không thể vượt qua root_path (vd) làm tham số cho hàm đã nói. – DreadPirateShawn

+0

Điều này cũng khắc phục sự cố cảnh báo không sử dụng Rails 4.2 'DEPRECATION CẢNH BÁO: named_routes.helpers không được dùng nữa, vui lòng sử dụng route_defined? (Route_name) để xem liệu tuyến đường đã được định nghĩa' chưa, tôi có nhật ký rspec sạch cho đến khi tôi đợi https : //github.com/rspec/rspec-rails/pull/1142 sẽ được phát hành. –

2

Tôi không nghĩ rằng bạn có quyền truy cập vào các tuyến đường được đặt tên bên trong thông số bộ điều khiển rspec của bạn. Tuy nhiên, bạn có thể truy cập ('/'), tương đương với root_path.

+0

Cảm ơn, nó hoạt động tốt và làm các xét nghiệm của tôi đi màu xanh lá cây! Tuy nhiên, hướng dẫn này dường như sử dụng các tuyến được đặt tên [railstutorial.org] (http://ruby.railstutorial.org/chapters/filling-in-the-layout?version=3.2#code:static_pages_spec_shared_example) và tôi rất tò mò muốn biết làm thế nào ^^ – FabPelletier

+0

Chào mừng bạn chỉ cần upvote và chấp nhận câu trả lời sau đó xin vui lòng! :) – TheDelChop

+0

Upvote yêu cầu 15 danh tiếng, xin lỗi! Tôi sẽ chờ một chút trước khi chấp nhận nó, trong trường hợp ai đó thực sự biết làm thế nào để làm cho nó hoạt động 'như trong cuốn sách' :) – FabPelletier

2

Bạn nên đã sử dụng

rails generate rspec:install 

thay vì

rspec --init 

và bạn sẽ không có thay đổi file config.

Đừng làm điều đó ngay bây giờ hoặc ứng dụng của bạn sẽ bị hỏng và bạn sẽ phải lãng phí một chút thời gian để tìm hiểu lý do tại sao nó bị hỏng.

+7

Nhưng nhận xét của bạn thực sự không phải là giải pháp. ;-) – Tass

2

Tôi gặp vấn đề tương tự, với cùng Hướng dẫn. Nó chỉ ra rằng tôi cần phải chỉ cần khởi động lại dịch vụ Spork, và tất cả làm việc tốt.

Giải pháp được đăng bởi Tom L đã làm việc cho tôi, nhưng khi tôi xóa dòng đó và khởi động lại Spork, điều đó cũng đã khắc phục được sự cố.

Hy vọng rằng sẽ giúp đỡ bất kỳ người nào khác, những người đang cảnh giác về việc bị lệch khỏi mã của hướng dẫn!

+1

Cảm ơn rất nhiều! Mã của @Tom L không hoạt động đối với tôi. Vì vậy, đó là lỗi của Spork afterall! Tôi đã dành cả buổi chiều để tìm một giải pháp! Cảm ơn nhiều! –

3

Google đưa tôi đến đây, ngay cả thông báo lỗi của tôi không phù hợp 100%.

Trong trường hợp của tôi Capybara lệnh visit không rõ ...

Lỗi:

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

Kể từ Capybara 2,0 người ta phải sử dụng thư mục spec/features lệnh Capybara không làm việc trong thư mục spec/requests nữa.

Điều đó đã giúp tôi: http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

Hy vọng bạn tìm thấy hữu ích này.

4

trong rspec_helper.rb:

RSpec.configure do |config| 
    config.include Rails.application.routes.url_helpers 
    ... 
end 
Các vấn đề liên quan