Rspec tests, l'appel de la méthode du contrôleur reçu NoMethodError
Si j'essayais juste d'appeler un log_in méthode de l'utilisateur contrôleur dans le RSpec comme
it "should get the index page" do
@user = User.new({ :email => "[email protected]" })
log_in(@user)
get 'index'
response.should be_success
end
Le résultat que j'ai obtenu, c'est comme
1) EmployeesController GET 'index' should get the index page
Failure/Error: log_in(user)
NoMethodError:
undefined method `log_in' for #<RSpec::Core::ExampleGroup::Nested_1:0x4ac0328>
# ./spec/controllers/employees_controller_spec.rb:11:in `user_log_in'
# ./spec/controllers/employees_controller_spec.rb:16:in `block (2 levels) in <top (required)>'
Quelqu'un peut-il m'aider? Grâce
Édité le 11 Mars 2011
Ici est la log_in méthode qui est dans UserController
def log_in(user)
session[:current_user] = user.id
end
À tout hasard vous êtes à l'aide de Concevoir?
Non, je n'ai pas utilisé de Concevoir
Est la méthode
Désolé pour le retard de mise à jour, c'est ici
Donc, vous essayez d'appeler le
Non, je n'ai pas utilisé de Concevoir
Est la méthode
user_log_in
ou log_in
? Pouvez-vous inclure cette méthode?Désolé pour le retard de mise à jour, c'est ici
Donc, vous essayez d'appeler le
log_in
méthode dans le UserController
de la EmployeesController
? Ce n'est pas vraiment possible.OriginalL'auteur Souloikj | 2011-03-04
Vous devez vous connecter pour publier un commentaire.
Si vous voulez appeler une méthode sur le contrôleur dans un RSpec contrôleur de test, vous pouvez utiliser les éléments suivants.
Elle doit appeler la méthode. Je ne sais pas si c'est vraiment une bonne pratique. Une meilleure méthode consisterait à talon la logged_in méthode BurmajaM suggéré.
subject
? Je sais que je peux fairecontroller.send
, donc je suppose que c'est commeUser.send(:log_in, @user)
?non, c'est sous réserve, dans ce contexte, il est le contrôleur.
OriginalL'auteur Shiv
Pourquoi ne pas vous stub logged_in? ou quel que soit votre méthode. La journalisation n'est pas la cible de cette spécification, de sorte frappé! Ici l'exemple simple comment je spec contrôleur de l'action qui a before_filter:
Hmmm ... c'est bizarre! Pourquoi faites-vous appel à UserController dans EmployeeController spec? Il n'a pas à faire quoi que ce soit avec #logged_in? droit?
@BurmajaM
Il y a un contrôle d'authentification comme before_filter pour la EmployeeController, j'ai pensé que j'ai besoin de vous connecter à passer ce before_filterJ'ai pensé, c'est pourquoi je vous ai dit de stub car ce n'est pas la cible de cette spécification. Avant les filtres ne sont que de simples méthodes sont exécutées avant l'action du contrôleur, ainsi, ils peuvent être écrasé comme: before(:each) { contrôleur.talons :logged_in? }
Merci encore, peut-être que j'ai fait quelque chose de mal, je vais creuser ça
OriginalL'auteur BurmajaM