2011-04-27 14 views
6

Probando rspec-rails. Me sale un error extraño: no se encuentran supuestamente rutas, aunque puedo acceder a ellas bien en el navegador cuando ejecuto rails.rspec-rails: Error/error: obtener "/" No coincide la ruta

incluso he probado con solo/

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

puedo definitivamente el acceso/y otros recursos en el navegador, sin embargo. ¿Hay algo que podría haber perdido al configurar rspec? Lo puse en el Gemfile y ejecuté rspec: install.

Gracias, MrB

editar: Aquí está mi prueba

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 

Aquí está mi archivo de ruta:

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 

Mi 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 

Didn en realidad cambiar algo aquí, creo.

+0

Publique su archivo de rutas? – tbaums

+0

¿Puedes publicar tu spec_helper.rb? – moritz

Respuesta

4

Por lo que yo sé, está tratando de combinar dos pruebas en una sola. En rspec esto debería resolverse en dos pasos. En una especificación prueba la ruta, y en otra prueba el controlador.

Por lo tanto, añadir un archivo 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 

y luego añadir un archivo spec/controllers/home_controller_spec.rb, y estoy usando los comparadores extendidos definidos por la debería o notable.

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 

En realidad, casi nunca uso render_views pero siempre probar mis componentes aislados como sea posible. Si la vista contiene el título correcto que pruebo en mi view-spec.

Uso de rspec pruebo cada componente (modelo, controlador, vistas, enrutamiento) por separado, y uso pepino para escribir pruebas de alto nivel para cortar todas las capas.

Espero que esto ayude.

+0

¡Bien! ¡Acabo de probar el enrutamiento y parece que funciona! ¡Gracias! – MrB

2

Usted tiene que describe un controlador para una prueba de controlador. Además, como está probando el contenido de la vista en la prueba de controlador y no una especificación de vista separada, tiene que marcar render_views.

describe SomeController, "GET /" do 
    render_views 

    it "does whatever" do 
    get '/' 
    response.should have_selector(...) 
    end 
end 
+0

Eso tampoco parece ayudar,/todavía no descubierto. En realidad, no estoy tratando de probar un controlador específicamente. Solo quiero probar si obtengo la vista correcta, así que supongo que es más una prueba de vista que una prueba de controlador. O tal vez todo en uno. Pero ni poner el controlador en la descripción ni poner 'render_views' ayudó :-( – MrB

+0

Si se trata de una especificación de vista, entonces no deberías estar accediendo a ninguna ruta. Ver http://relishapp.com/rspec/rspec-rails/v/2-5/dir/view-specs/view-spec para ejemplos. –

Cuestiones relacionadas