2012-08-08 11 views
6

Estoy completamente atorado aquí, y esperando que alguien pueda señalarme en la dirección correcta. Estoy tratando de usar rspec para probar mis webroutes. He seguido el ejemplo aquí:NoMethodError: método indefinido `get 'al ejecutar rspec y hacer llamadas a get/visit

https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec

con mi archivo de especificaciones de ser nombrado: api_tests_spec.rb en la especificación/solicita carpeta.

El archivo es el siguiente:

require 'spec_helper' 

describe "APITests" do 
    describe "GET /regions" do 
    it "should return a valid response" do 
     # Run the generator again with the --webrat flag if you want to use webrat methods/matchers 
     get "/regions.json" 
     response.status.should be(200) 
     #print response.body 
    end 
    end 
end 

Por desgracia, el mensaje de error que estoy recibiendo es el siguiente:

1) APITests GET/regiones debería devolver una válida respuesta avería/ERROR: obtener " /regions.json" NoMethodError: método no definido` get' para # # ./api_tests_spec.rb:7

¿alguien tiene alguna idea de por qué la método no se puede encontrar? Todo lo que he leído parece sugerir que algo no está siendo incluido correctamente, pero la solución siempre parece ser mover el archivo a la carpeta de solicitudes (donde el mío ya está). ¡Gracias por adelantado!

El archivo spec_helper.rb se parece a esto:

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 
end 
+0

¿Cómo está haciendo la prueba? ¿Qué hay en tu spec_helper? – Gazler

+0

paquete exec rspec api_tests_spec.rb, espec_helper agregado como una edición – akhalsa

Respuesta

6

Ok, después de la primera respuesta que he publicado parecía funcionar durante un rato, se detuvo (Aún no sabe por qué ?!)

Sin embargo , haciendo de este cambio en el archivo api_tests_spec.rb lo fija:

require 'spec_helper' 

describe "APITests", :type => :request do 
    describe "GET /regions" do 
    it "should return a valid response" do 
     # Run the generator again with the --webrat flag if you want to use webrat methods/matchers 
     get "/regions.json" 
     response.status.should be(200) 
     #print response.body 
    end 
    end 
end 

¿alguien tiene alguna idea de por qué el: => tipo: se requiere solicitud? Pensé que solo colocando esto en la carpeta de solicitudes debajo debería asumir que eran solicitudes.

+0

¿Estás seguro de que deberías estar usando ': type =>: request', en lugar de': type =>: controller'? Creo que RSpec intenta inferir el tipo del objeto que está probando. Entonces, si el objeto es, por ejemplo, 'ApiController' y hereda de' ApplicationController', RSpec puede decir que es una prueba de controlador. –

+0

Al final de [este número] (https://github.com/rspec/rspec-rails/issues/392), indica que la inferencia se realiza en función del nombre de la carpeta y no del tipo de objeto. Olvidé decir eso con tu nombre de 'APITests', la inferencia es difícil para mí sin ver esa clase. ¿Está su especificación correctamente en el directorio 'controladores'? –

Cuestiones relacionadas