2010-10-04 2 views
3

Je suis face à un problème avec rspec et contrôleursproblème à l'action de mise à jour à l'aide rspec rails 3

je suis une action de détermination des caractéristiques techniques mise à jour, afin de le faire que j'appelle le code suivant:

put :update, :id => "1", :ntp => {:name=>'myservah'} 

Mon contrôleur a le code suivant:

def update 
if @ntp.update_attributes(params[:ntp]) 
    flash.now[:notice] = "Successfully updated ntp." 
else 
    flash.now[:error] = ((errors_to_a(@ntp)*'.<br />')+'.') 
end 
render :partial => 'update' 
end 

Et je reçois l'erreur suivante:

Échec/Erreur: put: mise à jour,: id => "1",: ntp => {: nom => 'myservah'} Manquant partiel ntps/mise à jour avec {: handlers => [: erb,: rjs,: builder,: rhtml,: rxml],: formats => [: html],: locale => [: en,: en]} dans les chemins d'accès "#"

Ma question est: dois-je dire explicitement quel gestionnaire j'ai? Aujourd'hui, mon partiel est nommé '_update.js.erb'.

BTW, mon code fonctionne, je rends la version « js » de mise à jour, depuis que je viens de lancer quelques scripts

Répondre

13

Rails détecte le format de la réponse de certains paramètres de la requête, y compris la tête HTTP Accept de demande (intelligente deviner), le paramètre :format ou l'extension de page.

Sauf indication contraire, Rails définit par défaut le format de la requête sur :html.

Comme vous pouvez le voir, votre demande par défaut est :html ce qui signifie que Rails essaie de rendre le modèle _update.html.erb. Il y a quelques changements que vous pouvez appliquer pour résoudre le problème:

  1. toujours spécifier le format de la demande dans le test, si différent de HTML.

    # emulate a js request 
    put :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js 
    

    Si l'action est destinée à répondre à une requête AJAX, exécutez le test en utilisant la méthode xhr

    # emulate an XHR request 
    xhr :put, :update, :id => "1", :ntp => {:name=>'myservah'}, :format => :js 
    
  2. Retour 406 avec une réponse non js. Changer render :partial => 'update' à

    respond_to do |format| 
        format.js { render :partial => 'update' } 
        format.any { head 406 } 
    end 
    
+0

je devais changer juste le contrôleur et ajouter le format .. merci pour la pointe « 406 » .. BTW la syntaxe HXR, au moins dans rspec 2.0.0 est erroné. –

+0

Désolé, c'est «xhr». J'ai corrigé la réponse. –