Mocks ne fonctionnent pas avec RSpec et concevoir
-
26-09-2019 - |
Question
Je travaille sur une application Rails 3 Web au moment avec RSpec 2 et nous utilisons pour l'authentification Concevoir. Un (et bientôt beaucoup) de nos contrôleurs obligent l'utilisateur à être connecté. Je sais que fournit l'aide Devise test sign_in
, mais il peut être utilisé avec un objet fantaisie RSpec ou Mocha?
Je l'origine essayé @user = mock_model(User)
où l'utilisateur est la classe Devise. Cela ne fonctionnerait pas avec sign_in :user, @user
comme get 'index'
redirigerait le signe sous forme.
Quelqu'un at-il des tests d'expérience avec l'aide et peut Concevoir?
La solution
Nous avons eu un problème similaire, mais en utilisant Factory Girl. Nous avons résolu comme ceci:
En spec_helper.rb:
config.include Devise::TestHelpers, :type => :controller
Dans la spécification du contrôleur (juste un procédé d'emballage):
def login_user(user)
sign_in user
end
Ensuite, dans chaque méthode vous avez besoin, vous pouvez faire:
login_user(Factory(:user))
... où vous avez défini un objet utilisateur dans factories.rb. Je ne sais pas si cela fonctionnera avec se moque cependant.
Autres conseils
Une maquette ne va jamais au travail. Quand vous dites vous connecter, l'utilisateur est stocké en session (essentiellement, la classe d'utilisateur et son id). Lorsque vous accédez au contrôleur, un autre objet utilisateur est récupéré à partir des données stockées. La meilleure façon de résoudre le problème en utilisant quelque chose qui persiste l'objet, comme Factory Girl.
Je frappe la même question. Je fais ce qui suit pour l'instant:
before(:each) do
# sign_in mock_user
request.env['warden'] = mock(Warden, :authenticate => mock_user,
:authenticate! => mock_user)
end
J'ai créé un problème pour ce ici: https://github.com/ plataformatec / élaborer / questions # numéro / 928 Allez voter!
Aucun d'entre eux a travaillé pour moi (IRM 1.9.3-apercu1, rails 3.0.1.rc5).
est la solution que j'ai trouvé: http: / /blog.joshmcarthur.com/post/6407481655/integration-tests-with-devise-and-rspec