wake-up-neo.com

undefined Methode `get 'für # <RSpec :: Core :: ExampleGroup :: Nested_1: 0x00000106db51f8>

Weiß jemand, wie man das umgehen kann? Versuchen Sie unter OSX, RSpec mit Rails 3.0.7 zum Laufen zu bringen. Vollständige Details unter: 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=>#<Proc:/Users/mm/.rvm/gems/[email protected]/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:43>, :unless=>#<Proc:/Users/mm/.rvm/gems/[email protected]/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:44>}
F

Failures:

  1) ToolsController renders buttons_widgets partial
     Failure/Error: get :buttons_widgets
     NoMethodError:
       undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000106db51f8>
# ./tools_model_spec.rb:7:in `block (2 levels) in <top (required)>'
70
99miles

RSpec weiß nicht, dass es sich bei Ihrer Spezifikation um eine Controller-Spezifikation handelt. Daher haben Ihre Beispiele keinen Zugriff auf eine get-Methode.

RSpec 2.x geht davon aus, dass alles im Controller-Verzeichnis eine Controller-Spezifikation ist.

Dies wurde in RSpec 3 geändert:

Die Inferenz des Dateityps ist standardmäßig deaktiviert

Zuvor haben wir den Spezifikationstyp automatisch von einem Dateispeicherort abgeleitet. Dies war ein überraschendes Verhalten für neue Benutzer und für einige erfahrene Benutzer unerwünscht. Daher muss dieses Verhalten ab RSpec 3 explizit ausgewählt werden:

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

In den rspec-Rails README :

Controller-Spezifikationen befinden sich standardmäßig im spec/controllers folder. Das Markieren eines beliebigen Kontexts mit den Metadaten :type => :controller behandelt die Beispiele als Controller-Spezifikationen.

Ein Beispiel zum Festlegen der Controller-Kontext-Metadaten für RSpec:

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

Wenn Sie überhaupt 'spec/features' verwenden, müssen Sie der 'spec_helper.rb' möglicherweise Folgendes hinzufügen:

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

In Rspec 3.x wird der Spezifikationstyp nicht automatisch von einem Dateispeicherort abgeleitet. Sie müssen ihn manuell festlegen und dieser Datei spec_helper.rb hinzufügen

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

Rspec Upgrade

24
juankuquintana

Für andere, die dies untersuchen. Ich habe versucht, einen undefined method 'get'-Fehler aufzuspüren. Mein Problem war, dass ich die get in einem describe block hatte, sicherstellen, dass sich Ihre get in einem it block befindet.

14
superstar3000

Ich konnte dieses Problem in meiner App beheben, indem ich require 'rspec/Rails' meiner spec_helper-Datei hinzufügte.

14
Peter Brown

Gelöst durch Ersetzen der Leitung 
describe PagesController do mit RSpec.describe PagesController, :type => :controller do
in dem _spec.rb Datei im Spezifikationsordner.
Verwenden Sie auch expect(response).to be_success anstelle von response should be_success, um die Warnung über veraltete Informationen zu verhindern.
PS: Muss require "Rails_helper" nicht hinzugefügt werden.

5
curtis jacques

Ich habe diese Fehlermeldung erhalten, als ich vergessen hatte, require 'spec_helper' oben in meine Spezifikationsdatei oder --require spec_helper in meine .rspec-Datei einzufügen.

2
Brad Werth

Wenn Sie rspec zum Generieren der .rspec-Datei verwendet haben, sollten Sie den Inhalt folgendermaßen ändern:

--require spec_helper

zu:

--require Rails_helper
1
Aleks

Alternativ können Sie type: :request für Ihre Spezifikation angeben. Zum Beispiel:

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

Beispiel von hier https://www.relishapp.com/rspec/rspec-Rails/docs/request-specs/request-spec .

1
RubyFanatic

Ich hatte dieses Problem, als ich hinzufügte 

gem 'rspec'

zu meiner Gemfile im Rails-Projekt. Es sollte sein 

gem 'rspec'
gem 'rspec-Rails'

(oder nur rspec-Rails). Nach dem

bundle install

erstellen Sie das Spezifikationsverzeichnis erneut mit 

rspec --init

und legen Sie Ihre xxx_spec.rb-Datei in das entsprechende Verzeichnis (funktioniert nicht, wenn sie sich im Spezifikationsverzeichnis befindet). Anfängerfehler, aber vielleicht hilft das jemandem;) Hier ist der Link, der mir geholfen hat: 

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

0
Johannes Thoma

dies kann unter folgenden Bedingungen passieren:

  1. ihre Spezifikation hat :type => :controller [type: :controller in neuerem Ruby] nicht 

  2. ihre Spezifikation befindet sich nicht im Controller-Ordner oder Sie haben config.infer_spec_type_from_file_location! nicht festgelegt.

Entweder # 1 oder # 2 muss für Ihre Spezifikation eingerichtet werden. Dies kann auch unter dieser Bedingung passieren:

  1. sie haben eine Spezifikation unter Verwendung des alten Stils require 'spec_helper' geschrieben, anstatt den neueren require 'Rails_helper' zu verwenden. Sie werden feststellen, dass Rails_helper jetzt spec_helper enthält (um beide zu erzeugen, siehe Rspec Installationsschritte )

querverweis GH Problem https://github.com/Rails/rails-controller-testing/issues/36

0
Jason FB