método undefined `get ‘para #

Alguien sabe cómo evitar esto? En OSX, tratando de ejecutar RSpec con Rails 3.0.7. Todos los detalles en: https://gist.github.com/1017044

it "renders buttons_widgets partial" do get :buttons_widgets response.should render_template("buttons_widgets") end → rspec tools_model_spec.rb /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/version.rb:4: warning: already initialized constant STRING /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/metadata.rb:48: warning: already initialized constant RESERVED_KEYS /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/pending.rb:6: warning: already initialized constant DEFAULT_MESSAGE /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:6: warning: already initialized constant PROC_HEX_NUMBER /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:7: warning: already initialized constant PROJECT_DIR /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:43: warning: already initialized constant CONDITIONAL_FILTERS /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:48: warning: already initialized constant DEFAULT_BACKTRACE_PATTERNS /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/runner.rb:13: warning: already initialized constant AT_EXIT_HOOK_BACKTRACE_LINE /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core.rb:35: warning: already initialized constant SharedContext Run filtered excluding {:if=>#, :unless=>#} F Failures: 1) ToolsController renders buttons_widgets partial Failure/Error: get :buttons_widgets NoMethodError: undefined method `get' for # # ./tools_model_spec.rb:7:in `block (2 levels) in ' 

RSpec no sabe que su especificación es una especificación del controlador, por lo que sus ejemplos no tienen acceso a un método get .

RSpec 2.x supone que todo en el directorio de controladores es una especificación del controlador.

Esto fue cambiado en RSpec 3:

Inferencia tipo archivo deshabilitada de manera predeterminada

Anteriormente inferíamos automáticamente el tipo de especificación desde una ubicación de archivo, este fue un comportamiento sorprendente para los usuarios nuevos y no deseable para algunos usuarios veteranos, por lo que a partir de RSpec 3 en adelante, este comportamiento se debe incluir explícitamente en:

 RSpec.configure do |config| config.infer_spec_type_from_file_location! end 

https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#file-type-inference-disabled

En rspec-rails README :

Las especificaciones del controlador están predeterminadas para residir en la spec/controllers folder . Etiquetar cualquier contexto con los metadatos :type => :controller trata sus ejemplos como especificaciones del controlador.

Un ejemplo de configuración de los metadatos del contexto del controlador para RSpec:

 describe ToolsController, :type => :controller do # ... end 

Si está utilizando ‘especificaciones / características’, es posible que deba agregar lo siguiente a su ‘spec_helper.rb’

 config.include RSpec::Rails::RequestExampleGroup, type: :feature 

En Rspec 3.x, el tipo de especificación no se deduce automáticamente de una ubicación de archivo, y debe establecerlo manualmente, agréguelo al spec_helper.rb

 RSpec.configure do |config| config.infer_spec_type_from_file_location! end 

Actualización Rspec

Pude solucionar este problema en mi aplicación agregando require 'rspec/rails' a mi archivo spec_helper.

Para otros que investigan esto. Estaba intentando rastrear un error de undefined method 'get' . Mi problema era que tenía el get en un describe block asegúrate de que tu get esté en un it block .

Solucionado al reemplazar la línea
describe PagesController do con RSpec.describe PagesController, :type => :controller do
en el archivo _spec.rb en la carpeta de especificaciones.
Además, para evitar el uso de advertencia de desaprobación, use expect(response).to be_success lugar de response should be_success .
PD: no fue require "rails_helper" agregar require "rails_helper" .

require 'spec_helper' este error cuando olvidé agregar, require 'spec_helper' en la parte superior de mi archivo de especificaciones o --require spec_helper en mi archivo .rspec.

Una alternativa es especificar el type: :request de su especificación. Por ejemplo:

 RSpec.describe "Widget management", :type => :request do it "creates a Widget and redirects to the Widget's page" do get "/widgets/new" expect(response).to render_template(:new) post "/widgets", :widget => {:name => "My Widget"} expect(response).to redirect_to(assigns(:widget)) follow_redirect! expect(response).to render_template(:show) expect(response.body).to include("Widget was successfully created.") end end 

Ejemplo tomado de aquí https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec .

Tuve este problema cuando agregué

 gem 'rspec' 

a mi proyecto Gemfile in the rails. Debería ser

 gem 'rspec' gem 'rspec-rails' 

(o solo rspec-rails). Después

 bundle install 

volver a crear el directorio de especificaciones con

 rspec --init 

y ponga su archivo xxx_spec.rb en el directorio apropiado (no funcionará si está en el directorio de especificaciones). Error de principiante, pero tal vez esto ayude a alguien;) Aquí está el enlace que me ayudó:

https://www.relishapp.com/rspec/rspec-rails/docs/gettingstarted

esto puede suceder bajo las siguientes condiciones:

  1. su especificación no tiene :type => :controller [ type: :controller in newy Ruby]

  2. ¡su especificación no está en la carpeta de controladores o no ha configurado config.infer_spec_type_from_file_location!

Ya sea # 1 o # 2 deben configurarse para su especificación. Además, esto también puede ocurrir en esta condición:

  1. usted ha escrito una especificación usando el viejo estilo require 'spec_helper' lugar de usar la más nueva require 'rails_helper' . Notará que rails_helper ahora incluye spec_helper (para generar ambos vea los pasos de instalación de Rspec )

referencia cruzada problema de GH https://github.com/rails/rails-controller-testing/issues/36