Comment cela peut-il détruire l'action testé avec RSpec?
Dans mon application Rails, si un user
veut supprimer son propre compte, il doit d'abord avoir à entrer son mot de passe dans mon terminate
vue:
<%= form_for @user, :method => :delete do |f| %>
<%= f.label :password %><br/>
<%= f.password_field :password %>
<%= f.submit %>
<% end %>
C'est mon UsersController
:
def terminate
@user = User.find(params[:id])
@title = "Terminate your account"
end
def destroy
if @user.authenticate(params[:user][:password])
@user.destroy
flash[:success] = "Your account was terminated."
redirect_to root_path
else
flash.now[:alert] = "Wrong password."
render :terminate
end
end
Le problème est que je n'arrive pas à trouver un moyen de tester cela avec RSpec.
Ce que j'ai est: est-ce
describe 'DELETE #destroy' do
before :each do
@user = FactoryGirl.create(:user)
end
context "success" do
it "deletes the user" do
expect{
delete :destroy, :id => @user, :password => "password"
}.to change(User, :count).by(-1)
end
end
end
Cependant, cela me donne une erreur:
ActionView::MissingTemplate:
Missing template users/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007fa7f51310d8>"
Quelqu'un peut-il me dire ce que je suis absent ici ou suggérer une meilleure façon de tester cette action?
Merci pour toute aide.
- l'erreur que vous obtenez est très bizarre. BTW, vous n'avez pas d'envoyer les bons paramètres
- Avez-vous eu la vision pertinente des modèles en place?
- avec cette mise en œuvre, l'OP n'a pas besoin de
destroy
modèle, mais le manque de ce modèle est que RSpec se plaint pour. - Modification de la ligne de demande dans les tests de cette suppression :détruire, :id => @user.id :mot de passe => "mot de passe" permet de faire une différence?
- Vous avez probablement raison. Je suis toujours en essayant de garder mes questions aussi court que possible et parfois je m'emporte. Désolé à ce sujet.
- Oui, je les ai tous.
- Vous êtes de droite. J'ai créé un fichier vide
destroy.html.erb
et qui a éliminé l'erreur. Même après la suppression de ce fichier là encore, l'erreur est encore disparu. - Nope, ça n'a pas changer quoi que ce soit.
Vous devez vous connecter pour publier un commentaire.
OK, c'est ma solution:
La
before :each
appel que j'avais avant était inutile (ce n'est pas un test d'intégration, après tout). Le mot de passe doit être passé comme ceci::user => {:password => @user.password}
que je ne connaissais pas jusqu'à ce que la lecture de ce fil.