Besoin de parcourir un tableau en rspec, test pas en cours d'exécution
J'ai un test qui doit parcourir 5 éléments dans un tableau puis vérifiez que tous les éléments sont affichés sous forme de liste les éléments sur la page. J'ai le code ci-dessous, c'est le dernier test avec le commentaire "#obtenir les 5 premiers articles de blog'. Quand je lance les tests, ce test n'est pas vu, parce que seulement 4 tests se sont exécutés. Si je déplace le "il {}' énoncé à l'extérieur de la matrice blog de code, le test devient visible. Comment puis-je écrire correctement ce test, alors il peut faire une boucle correctement?
require 'spec_helper'
require 'requests/shared'
describe "Header" do
let (:title) { "my title" }
subject { page }
before { visit root_path }
describe "Home" do
it { should have_selector('title', text: title) }
it { should have_selector('header') }
it { should have_link 'Home', href: root_path}
describe "Blog link exist" do
it { should have_link 'Blog'}
end
describe "Blog list elements" do
#get the first 5 blog posts
Blog.all(limit:5).each do |blog|
it { should have_selector('ul.accordmobile li#blog ul li a', text: blog.title, href: blog_path(blog.id)) }
end
end
end
fin
quel est le message d'erreur?
OriginalL'auteur Wale | 2013-05-22
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas avoir votre test imbriquée de cette façon en raison de RSpec être un DSL. RSpec lit l'exemple des fichiers de spec d'abord, avant de lancer les tests. De sorte qu'il frappe le
Blog.all
avant tout les tests sont exécutés. Cela signifie également qu'il n'existe pas de population de la base de données. Donc, sauf si il y avait des restes de l'état d'un précédent essaiBlog.all
sera de retour[]
.En essayant de créer des objets dans un
before
ne fonctionnera pas non plus avec la façon dont le test est écrit dans votre question. Encore une fois, cela est dû àBlog.all
être exécuté au moment de l'analyse, tandis quebefore
est exécuté au temps de test.Afin d'obtenir ce que vous voulez, vous aurez probablement besoin de casser la "seulement tester une chose" la règle et le nid de la
Blog.all
à l'intérieur de lait
bloc:Sonne comme un bug dans le code. C'est pourquoi nous avons des tests. 😀 voyez-vous tous les six lors du chargement de la page avec plus de 5 blog des éléments dans la DB?
Dans mon environnement de développement cela a l'air bien. Je n'ai pas été en mesure de charger ce que l'environnement de test voit. J'ai ajouté launchy gem, nécessaire dans spec_helper.rb.rb, appelé save_and_open_page mais j'ai des erreurs à propos de cette méthode n'est pas trouvé.
vous pouvez aller à la vieille école, en faisant
p page
ou c'est peut-êtrep page.body
de regarder le rendu HTML.Trouvé le problème, pour une raison href j'ai donné à have_selector n'a pas de contrepartie. Depuis les blogs que j'ai créé a eu le même titre, le xpath n'a pas été assez unique et donc, appariés d'ancrage des éléments comme le nombre de fois que la boucle de courant. La blog.id href était censée correspondre unique blogs, mais have_selector a l'aide de la seule css et le texte. J'ai fait les titres uniques pour résoudre ce problème, peut-être have_selector ne peut pas correspondre sur le texte + href?. De toute façon un grand merci à tous pour votre aide, j'ai passé trop d'heures à essayer de résoudre ce problème.
OriginalL'auteur Aaron K
important! de l'espoir de la boucle, vous devriez avoir 5 ou plus de 5 blogs.
que
peut-être cela devrait être re-factorisé comme
hey les tests sont tun sur la base de données de test pas sur le développement de la base de données, je ne vois aucune création de blog objets, afin de créer avec les réglages d'usine ou des accessoires.
Merci de souligner ce point. Maintenant j'ai refait le test pour créer une entrée de blog 6 fois. Dans l'INTERFACE utilisateur je suis en affichant uniquement les 5 premières entrées. Cependant, le test est effectivement en mesure de trouver 6 li éléments et il est de passage. Je ne comprends pas pourquoi il y a une incohérence dans l'environnement de test. Comment puis-je charger l'INTERFACE utilisateur que le test env voit? Merci beaucoup.
OriginalL'auteur Sachin Singh