Rspec vue des tests avec le capybara et rails3
J'aime vraiment la façon RSpec est capable de séparer le contrôleur et la vue des tests, mais certains ont des problèmes avec l'obtention de capybara de rapprochement de travail en vue de test. Ce que j'ai essentiellement essayez d'atteindre est qqch comme ceci:
describe "some page" do
it "should render with lots of stuff" do
assign ..
render
rendered.should have_button ('Any button') #or any capybara matcher, really
end
end
J'ai vu quelques posts sur le net montrant comment configurer capybara et rails3 travailler en douceur avec le concombre ou rspec contrôleur de tests, mais ce n'est pas vraiment ce que je veux - c'est, les tests de la vue au niveau le plus bas possible.
Aussi si il y a une autre façon de le faire (ne nécessitant pas beaucoup de code personnalisé, couse je sais que je pourrais écrire certains de rapprochement que l'extrait donné des sélecteurs d'rendus à l'aide de nokogiri ou quel que soit l'outil approprié), ce serait sympa aussi - à l'aide de capybara est pas une obligation.
Vous devez vous connecter pour publier un commentaire.
Il y a maintenant une option pour utiliser Capybara de rapprochement (sans Webrat bagages) lors de l'essai de contrôleurs et les vues trop). Je l'utilise de cette façon:
Code complet:
Références:
Capybara actuellement ne fonctionne pas avec la vue des specs (il y a des plans pour le faire fonctionner dans le futur). La réponse la plus simple est de simplement ajouter
gem 'webrat'
dans le Gemfile et vous êtes essentiellement en jeu. Vous pourriez ne pas avoirhave_button
mais vous aurezhave_selector
,have_tag
et similaires disponibles.Btw: autant que je sache, capybara et webrat peuvent co-exister dans un projet.
Légèrement plus simple que Pawel réponse, mais l'essence est la même; les ouvrages suivants, pour moi avec des rails 3.1.0, rspec 2.6.0, capybara 1.1.1:
Vous ne pouvez pas appeler capybara méthodes sur
rendered
, c'est juste une chaîne de caractères. Vous pouvez utiliser Capybara de la méthode de chaîne bien envelopperrendered
dans un Capybara nœud. Ensuite, vous pouvez appeler le Capybara méthodes sur ce nœud:Pour plus d'informations, consultez ce post:
http://www.tamingthemindmonkey.com/2011/11/07/capybara-matchers-and-scoping-in-view-specs
Au bas de cette page, dans le "Webrat et le Capybara" section, il ressemble à Capybara est pas prise en charge pour rspec vue des specs
http://relishapp.com/rspec/rspec-rails
:rack_test
), la rédaction de votre vue des tests que "la demande de tests" avec Capybara devrait quand même vous donner une assez bonne performance, par la manière. C'est la façon dont j'ai essentiellement test de mon point de vue. Vous venez de ne pas arriver à utiliserassign
, de sorte que vous avez un peu moins de contrôle par rapport à la "vraie" vue des tests.Mise à jour de cette vieille question, que les choses ont changé depuis que la plupart des autres réponses ont été ajoutés:
Capybara maintenant prend en charge la vue des specs (de la boîte) et c'est documenté sur Capybara de la branche master.
De citer les docs:
Enfin, Capybara les allumettes sont pris en charge en vue des specs:
De soutien pour ces sans autre
let(:page)
code de style semble avoir été ajouté dans une version antérieure. (Il travaille pour moi dans le capybara 2.4.4 et 2.2).Notez également que seul un sous-ensemble limité de rapprochement sont pris en charge; cependant, vous pouvez obtenir plus de fonctionnalités à l'aide de Capybara.chaîne; ex:
Vous pouvez également utiliser le capybara syntaxe