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)>'
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
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
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
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.
Ich konnte dieses Problem in meiner App beheben, indem ich require 'rspec/Rails'
meiner spec_helper-Datei hinzufügte.
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.
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.
Wenn Sie rspec
zum Generieren der .rspec
-Datei verwendet haben, sollten Sie den Inhalt folgendermaßen ändern:
--require spec_helper
zu:
--require Rails_helper
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 .
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
dies kann unter folgenden Bedingungen passieren:
ihre Spezifikation hat :type => :controller
[type: :controller
in neuerem Ruby] nicht
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:
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