Rails de, de legs, Rspec: Undefined method 'sign_in'
Je suis en train d'écrire des tests Rspec dans les Rails, à l'aide de Concevoir des méthodes d'assistance pour la connexion et déconnexion. Le sign_in méthode ne fonctionne pas. Cependant, il a été de travailler plus tôt, avant qu'une série de modifications à l'application.
Choses que j'ai essayé:
- Je suis y compris le test des aides dans Rspec.configurer.
- À l'aide du directeur de login_as
- De compensation les Rails cache.
- Se débarrasser de Capybara pour voir si qui ont été à l'origine du problème
- Je ne suis pas le réglage de la session explicitement dans mon contrôleur spécifications (par exemple, pas de valid_session)
Jusqu'à présent, pas de dés. Que dois-je faire différemment pour tester mon contrôleurs avec un utilisateur connecté?
Message d'erreur:
OrderItemsController GET #index renders the :index view
Failure/Error: sign_in :admin
NoMethodError:
undefined method `sign_in' for # <RSpec::ExampleGroups::OrderItemsController_2::GETIndex:0x00000102c002d0>
# ./spec/controllers/order_items_controller_spec.rb:6:in `block (2 levels) in <top (required)>'
Contrôleur Spec
require 'spec_helper'
describe OrderItemsController do
before (:each) do
admin = create(:admin)
sign_in :admin
end
describe "GET #index" do
it "renders the :index view" do
get :index
expect( response ).to render_template :index
end
end
end
spec_helper.rb.rb
require 'rspec/rails'
require 'capybara/rspec'
RSpec.configure do |config|
config.include ApplicationHelper
config.include ControllersHelper
config.include UsersHelper
config.include Devise::TestHelpers, type: :controller
config.include FactoryGirl::Syntax::Methods
end
Gemfile
group :development, :test do
gem 'rspec-rails', '~> 3.0.0.beta'
gem 'capybara'
gem 'factory_girl_rails'
gem 'faker'
gem 'dotenv-rails'
gem 'guard'
gem 'guard-annotate'
gem 'guard-rspec', require: false
gem 'guard-livereload', require: false
gem 'foreman'
end
usines/utilisateur.rb
FactoryGirl.define do
factory :user do
first { Faker::Name.first_name }
last { Faker::Name.last_name }
email { Faker::Internet.email }
admin false
password "secrets1"
password_confirmation "secrets1"
confirmed_at Date.today
factory :admin do
admin true
end
end
end
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Avez-vous récemment mise à niveau de RSpec 3 comme je l'ai fait? C'est à partir de RSpec 3 documentation:
Après j'ajoute que l'extrait de code de configuration, je n'ai plus de spécifier le type de spécifications (par exemple
type: :controller
).J'ai trouvé une solution. J'ai explicitement défini le contrôleur de Décrire bloc comme un type de contrôleur.
Je ne comprends toujours pas pourquoi ce code a travaillé plus tôt, mais maintenant les besoins de cette (apparemment redondante) déclaration explicite. Peu importe, je vous en serais reconnaissant l'apprentissage de ce qui s'est passé ici. Merci!
Je peux vous donner un exemple (fonctionne pour moi - rspec /capybara /simplecov etc..)
spec/spec_helper.rb.rb
spec/intégration/user_flow_spec.rb
J'espère que ce sera ok 🙂 je pense que votre problème est manquant Gardien de tester les aides...
Vous pouvez utiliser le dispositif aide dans le fichier spec/spec_helper.rb.rb:
Pour les Rails 5 et Rspec 3, vous devez ajouter ceci dans votre spec_helper.rb.rb