2010-08-23 4 views
2

je dois tester l'aide suivante:les aides de vue d'essai dans Rails avec RSpec

def display_all_courses 
    @courses = Course.all 

    output = "" 

    for course in @courses do 
    output << content_tag(:li, :id => course.title.gsub(" ", "-").downcase.strip) do 
     concat content_tag(:h1, course.title) 
     concat link_to("Edit", edit_course_path(course)) 
    end 
    end 

    return output 
end 

et je me demande s'il y a un moyen que je peux tester la sortie de ce. Fondamentalement, je veux juste tester que l'aide me donne le nombre correct d'éléments li, et peut-être le cas quand il n'y a pas de cours.

Ma première pensée est de faire quelque chose comme ceci:

describe DashboardHelper do 
    describe display_all_courses do 
    it "should return an list of all the courses" do 
     7.times{Factory(:course) 
     html = helper.display_all_courses 
     html.should have_selector(:li) 
    end 
    end 
end 

et cela fonctionne très bien. Cependant, si j'ajoute l'option: count à l'appel de has_selector, elle échoue soudainement, quelqu'un peut-il m'aider à comprendre pourquoi?

Répondre

-8

Il est clair qu'un modèle est le meilleur moyen de le faire.

+0

Pourriez-vous expliquer cette réponse? – nathanvda

+0

oui. une explication serait bien. – sambehera

1

Peut-être que cela pourrait aider à traiter le HTML comme XML? Dans ce cas, this link pourrait aider.

Il définit un matcher have_xml qui pourrait être exactement ce dont vous avez besoin. Bien que je comprenne ce serait plus agréable si le have_tag fonctionnerait juste sur des chaînes aussi.

+0

hmmmm je regarderai dans ce, merci pour le heads up. – TheDelChop

5

Je crois que ce que vous recherchez était have_tag et with_tag aides RSpec

describe DashboardHelper do 
    describe display_all_courses do 
    it "should return an list of all the courses" do 
     7.times{ Factory(:course) } 
     helper.display_all_courses.should have_tag('ul') do 
     with_tag('li', 3) 
     end 
    end 
    end 
end 
Questions connexes