metodo non definito `get ‘per #

Qualcuno sa come aggirare questo? Su OSX, cercando di far funzionare RSpec con Rails 3.0.7. Tutti i dettagli su: 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/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/version.rb:4: warning: already initialized constant STRING /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/metadata.rb:48: warning: already initialized constant RESERVED_KEYS /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/pending.rb:6: warning: already initialized constant DEFAULT_MESSAGE /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:6: warning: already initialized constant PROC_HEX_NUMBER /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:7: warning: already initialized constant PROJECT_DIR /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:43: warning: already initialized constant CONDITIONAL_FILTERS /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:48: warning: already initialized constant DEFAULT_BACKTRACE_PATTERNS /Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/runner.rb:13: warning: already initialized constant AT_EXIT_HOOK_BACKTRACE_LINE /Users/mm/.rvm/gems/[email protected]/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 non sa che le tue specifiche sono specifiche del controller, quindi i tuoi esempi non hanno accesso a un metodo get .

RSpec 2.x presuppone che tutto nella directory dei controller sia una specifica del controller.

Questo è stato cambiato in RSpec 3:

Inferenza di tipo file disabilitata per impostazione predefinita

Precedentemente abbiamo dedotto automaticamente il tipo di specifica da un percorso file, questo era un comportamento sorprendente per i nuovi utenti e indesiderato per alcuni utenti esperti, quindi da RSpec 3 in poi questo comportamento deve essere esplicitamente triggersto con:

 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

Nel README di rspec-rails :

Le specifiche del controller sono predefinite per risiedere nella spec/controllers folder . Tagging qualsiasi contesto con i metadati :type => :controller considera i suoi esempi come specifiche del controller.

Un esempio di impostazione dei metadati di contesto del controller per RSpec:

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

Se stai utilizzando “specifiche / caratteristiche”, potresti dover aggiungere quanto segue al tuo ‘spec_helper.rb’

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

In Rspec 3.x il tipo di specifica non viene automaticamente dedotto da un percorso di file, ed è necessario impostarlo manualmente, aggiungerlo allo spec_helper.rb

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

Aggiornamento Rspec

Sono stato in grado di risolvere questo problema nella mia app aggiungendo require 'rspec/rails' al mio file spec_helper.

Per gli altri che guardano a questo. Stavo cercando di rintracciare un errore undefined method 'get' . Il mio problema era che ho avuto il get in un describe block assicurati che il tuo get sia in un it block .

Risolto sostituendo la linea
describe PagesController do con RSpec.describe PagesController, :type => :controller do
nel file _spec.rb nella cartella spec.
Anche per evitare che l’avviso di deprecazione usi expect(response).to be_success invece di response should be_success .
PS: non è stato necessario aggiungere require "rails_helper" .

Ho ricevuto questo errore quando ho dimenticato di aggiungere require 'spec_helper' all’inizio del mio file spec o --require spec_helper al mio file .rspec.

Un’alternativa è specificare il type: :request per la tua specifica. Per esempio:

 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 

Esempio tratto da qui https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec .

Ho avuto questo problema quando ho aggiunto

 gem 'rspec' 

al mio progetto Gemfile in the rails. Dovrebbe essere

 gem 'rspec' gem 'rspec-rails' 

(o solo rspec-rails). Dopo

 bundle install 

ricreare la directory spec con

 rspec --init 

e metti il ​​tuo file xxx_spec.rb nella directory appropriata (non funzionerà se si trova nella directory spec). Errore dei principianti ma forse questo aiuta qualcuno;) Ecco il link che mi ha aiutato:

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

questo può accadere nelle seguenti condizioni:

  1. la tua specifica non ha :type => :controller [ type: :controller in Ruby più recente]

  2. la tua specifica non si trova nella cartella dei controller o non hai impostato config.infer_spec_type_from_file_location!

O # 1 o # 2 deve essere impostato per le specifiche. Inoltre, questo può accadere anche in questa condizione:

  1. hai scritto una specifica usando il vecchio stile require 'spec_helper' invece di usare il più recente require 'rails_helper' . rails_helper che rails_helper ora include spec_helper (per generare entrambi, vedi i passaggi di installazione di Rspec )

cross reference GH issue https://github.com/rails/rails-controller-testing/issues/36