J'essayais encore Rails, cette fois la version 3, mais je me suis coincé en écrivant des tests pour une action que j'appelle seulement à distance.Rails: meilleur moyen de tester une action appelée à distance?
Un exemple concret:
Contrôleur
class PeopleController < ApplicationController
def index
@person = Person.new
end
def create
@person = Person.new(params[:person])
@person.save
end
end
Voir (index.html.erb)
<div id="subscription">
<%= form_for(@person, :url => { :action => "create" }, :remote => true) do |f| %>
<%= f.text_field :email %>
<%= f.submit "Subscribe" %>
<% end %>
</div>
Voir (create.js.erb)
<% if @person.errors.full_messages.empty? %>
$("#subscription").prepend('<p class="notice confirmation">Thanks for your subscription =)</p>');
<% else %>
$("#subscription").prepend('<p class="notice error"><%= @person.errors.full_messages.last %></p>');
<% end %>
Comment puis-je tester ce formulaire à distance submi ssion? Je voudrais juste savoir si les messages d'avis sont présentés correctement. Mais si j'essaye de faire juste
test "create adds a new person" do
assert_difference 'Person.count' do
post :create, :people => {:email => '[email protected]'}
end
assert_response :success
end
Il dira que l'action "créer" manque un modèle.
Comment tes gars testent-ils habituellement les appels à distance?
Merci jasonpgignac, qui résout mon problème majeur, ne pas pouvoir soumettre la requête à distance. D'une manière ou d'une autre, je pourrais trouver cette méthode 'xhr'. Fonctionne comme un charme pour "assert_response: le succès". Maintenant j'essaie de trouver un moyen de tester les résultats du javascript exécuté. Je présente un message différent s'il y avait des erreurs sur la soumission ou non. Mais assert_select ne me laisse pas interroger le code HTML de la page, après avoir lancé la méthode "get: index" et la méthode "xhr". Une idée de comment vérifier si le bon message a été présenté? – sdsantos
Eh bien, pour clarifier que je comprends ce que vous demandez - essayez-vous de tester le javascript qui est retourné par votre contrôleur, à la suite de l'appel xhr? parce que vous pouvez tester le contenu de ce qui est retourné. Mais si vous essayez de tester un javascript qui est exécuté sur la page pour voir si le comportement réel est plus difficile, vous ne pouvez pas lui demander d'exécuter un javascript et d'afficher la réponse. Vous feriez peut-être mieux d'utiliser quelque chose comme Selenium avec Webrat, où il ouvre en fait un navigateur et un utilisateur behvaiour. – jasonpgignac
Ouais, je voulais tester le résultat sur la page après l'exécution du javascript. Je vais vérifier ces bibliothèques. Encore merci. – sdsantos