web-dev-qa-db-fra.com

méthode non définie `get 'pour # <RSpec :: Core :: ExampleGroup :: Nested_1: 0x00000106db51f8>

Quelqu'un sait comment contourner cela? Sous OSX, essayez d’exécuter RSpec avec Rails 3.0.7. Tous les détails sur: 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=>#<Proc:/Users/mm/.rvm/gems/Ruby-1.9.2-p0@evergreen/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:43>, :unless=>#<Proc:/Users/mm/.rvm/gems/Ruby-1.9.2-p0@evergreen/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 ne sait pas que votre spécification est une spécification de contrôleur, vos exemples n'ont donc pas accès à une méthode get.

RSpec 2.x suppose que tout ce qui se trouve dans le répertoire controllers est une spécification de contrôleur.

Cela a été changé dans RSpec 3:

Inférence de type de fichier désactivée par défaut

Auparavant, nous déduisions automatiquement le type de spécification à partir d'un emplacement de fichier. Il s'agissait d'un comportement surprenant pour les nouveaux utilisateurs et indésirable pour certains utilisateurs chevronnés. À partir de RSpec 3, vous devez activer explicitement ce comportement avec:

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

Dans le rspec-Rails README :

Les spécifications du contrôleur résident par défaut dans le spec/controllers folder. Marquer n'importe quel contexte avec les métadonnées :type => :controller considère ses exemples comme des spécifications de contrôleur.

Exemple de définition des métadonnées de contexte de contrôleur pour RSpec:

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

Si vous utilisez "spec/features", vous devrez peut-être ajouter ce qui suit à votre "spec_helper.rb"

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

Dans Rspec 3.x, le type de spécification n'est pas automatiquement déduit d'un emplacement de fichier. Vous devez le définir manuellement. Ajoutez-le au fichier spec_helper.rb.

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

Mise à niveau Rspec

24
juankuquintana

Pour les autres qui s'intéressent à cela. J'essayais de localiser une erreur undefined method 'get'. Mon problème était que j'avais la get dans un describe block, assurez-vous que votre get est dans un it block.

14
superstar3000

J'ai pu résoudre ce problème dans mon application en ajoutant require 'rspec/Rails' à mon fichier spec_helper.

14
Peter Brown

Résolu en remplaçant la ligne 
describe PagesController do avec RSpec.describe PagesController, :type => :controller do
dans le _spec.rb fichier dans le dossier spec.
Également pour éviter l'avertissement de désapprobation, utilisez expect(response).to be_success au lieu de response should be_success.
PS: N'a pas eu besoin d'ajouter require "Rails_helper".

5
curtis jacques

J'ai eu cette erreur lorsque j'ai oublié d'ajouter require 'spec_helper' en haut de mon fichier de spécifications ou --require spec_helper à mon fichier .rspec.

2
Brad Werth

Si vous avez utilisé rspec pour générer le fichier .rspec, vous devez modifier le contenu de:

--require spec_helper

à:

--require Rails_helper
1
Aleks

Une alternative consiste à spécifier type: :request pour vos spécifications. Par exemple:

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

Exemple pris ici https://www.relishapp.com/rspec/rspec-Rails/docs/request-specs/request-spec .

1
RubyFanatic

J'ai eu ce problème quand j'ai ajouté 

gem 'rspec'

à mon Gemfile dans le projet Rails. CA devrait etre 

gem 'rspec'
gem 'rspec-Rails'

(ou simplement rspec-Rails). Après

bundle install

recréez le répertoire spec avec 

rspec --init

et placez votre fichier xxx_spec.rb dans le répertoire approprié (cela ne fonctionnera pas s'il se trouve dans le répertoire spec). Erreur de débutant mais peut-être que cela aide quelqu'un;) Voici le lien qui m'a aidé: 

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

0
Johannes Thoma

cela peut se produire dans les conditions suivantes:

  1. votre spécification n'a pas :type => :controller [type: :controller dans Ruby plus récent] 

  2. votre spécification ne se trouve pas dans le dossier des contrôleurs ou vous n'avez pas défini config.infer_spec_type_from_file_location!

Soit N ° 1 ou N ° 2 doit être configuré pour vos spécifications. Cela peut aussi arriver dans cette condition:

  1. vous avez écrit une spécification utilisant l'ancien require 'spec_helper' au lieu d'utiliser le plus récent require 'Rails_helper'. Vous noterez que Rails_helper inclut maintenant spec_helper (pour générer les deux, voir les étapes d'installation de Rspec ).

références croisées problème GH https://github.com/Rails/rails-controller-testing/issues/36

0
Jason FB