Je suis assez nouveau sur RoR et j'ai récemment commencé à apprendre BDD/Rspec pour tester mon application. Je cherchais un moyen de spécifier une demande AJAX, mais jusqu'à présent, je n'ai pas trouvé beaucoup de documentation à ce sujet.
Quelqu'un sait-il comment faire ça? J'utilise Rails 2.3.8, rspec 1.3.0 et mocha 0.9.8 pour mes talons (que je suis également en train d'apprendre ...)
Si vous parlez de le tester dans les spécifications de votre contrôleur, où vous appelez normalement
get :index
pour faire une requête HTTP à l'action d'index, vous appelleriez à la place
xhr :get, :index
pour effectuer une requête XmlHttpRequest (AJAX) à l'action d'index à l'aide de GET.
Depuis Rails 5.0 (avec RSpec 3.X), essayez de définir xhr: true
comme ça:
get :index, xhr: true
Voici le code pertinent dans ActionController :: TestCase . La définition de l'indicateur xhr
finit par ajouter les en-têtes suivants:
if xhr
@request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
@request.fetch_header("HTTP_ACCEPT") do |k|
@request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
end
end
La syntaxe a changé un peu pour Rails 5 et rspec> 3.1 (je crois)
pour les demandes POST:
post :create, xhr: true, params: { polls: { question: 'some' } }
vous devez maintenant définir explicitement params
pour les demandes GET:
get :action, xhr: true, params: { id: 10 }
pour Rails 4 et rspec <= 3.1
xhr post :create, { polls: { question: 'some' } }
OBTENIR des demandes:
xhr get :show, id: 10