rspec-rails: Ошибка / Ошибка: get "/" Нет совпадений маршрутов - PullRequest
6 голосов
/ 27 апреля 2011

Опробование rspec-рельсов.Я получаю странную ошибку - якобы, маршруты не найдены, хотя я могу нормально обращаться к ним в браузере при запуске rails s.

Я даже попробовал его только с /

Failure/Error: get "/"
     ActionController::RoutingError:
       No route matches {:controller=>"action_view/test_case/test", :action=>"/"}

Iможет определенно получить доступ к / и другим ресурсам в браузере.Есть ли что-то, что я мог пропустить при настройке rspec?Я поместил его в Gemfile и запустил rspec: install.

Спасибо, MrB

edit: Вот мой тест

  1 require 'spec_helper'
  2 
  3 describe "resource" do
  4   describe "GET" do
  5     it "contains /" do
  6       get "/"
  7       response.should have_selector("h1", :content => "Project")
  8     end
  9   end
 10 end

Вот мой файл маршрута:

myApp::Application.routes.draw do

  resources :groups do
    resources :projects
  end 

  resources :projects do
    resources :variants
    resources :steps

    member do
      get 'compare'
    end 
  end 

  resources :steps do
    resources :costs
  end 

  resources :variants do
    resources :costs
  end 

  resources :costs

  root :to => "home#index"

end

Мой spec_helper.rb:

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

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

RSpec.configure do |config|

  config.mock_with :rspec
  config.include RSpec::Rails::ControllerExampleGroup


  config.fixture_path = "#{::Rails.root}/spec/fixtures"


  config.use_transactional_fixtures = true
end

Думаю, здесь ничего не изменилось.

Ответы [ 2 ]

4 голосов
/ 04 мая 2011

Насколько я знаю, вы пытаетесь объединить два теста в один. В rspec это должно быть решено в два этапа. В одной спецификации вы проверяете маршрутизацию, а в другой вы проверяете контроллер.

Итак, добавьте файл spec/routing/root_routing_spec.rb

require "spec_helper"

describe "routes for Widgets" do
  it "routes /widgets to the widgets controller" do
    { :get => "/" }.should route_to(:controller => "home", :action => "index")
  end
end

А затем добавьте файл spec/controllers/home_controller_spec.rb, и я использую расширенные средства сопоставления, определенные с помощью musta или замечательного.

require 'spec_helper'

describe HomeController do

  render_views

  context "GET index" do
    before(:each) do
      get :index
    end
    it {should respond_with :success }
    it {should render_template(:index) }

    it "has the right title" do
      response.should have_selector("h1", :content => "Project")
    end

  end
end  

На самом деле, я почти никогда не использую render_views, но всегда проверяю свои компоненты как можно более изолированными. Содержит ли представление правильное название, которое я проверяю в спецификации вида.

Используя rspec, я тестирую каждый компонент (модель, контроллер, виды, маршрутизацию) по отдельности, а я использую огурец для написания высокоуровневых тестов, чтобы разрезать все слои.

Надеюсь, это поможет.

2 голосов
/ 27 апреля 2011

Вы должны describe контроллер для проверки контроллера. Кроме того, поскольку вы тестируете содержимое представления в тесте контроллера, а не отдельную спецификацию представления, вам необходимо render_views.

describe SomeController, "GET /" do
  render_views

  it "does whatever" do
    get '/'
    response.should have_selector(...)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...