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ỳ^^ '
Đó 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
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
Đ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. –