2016-07-05 19 views
0

Ich habe den folgenden Integrationstest für meinen Ruby on Rails-Code, der überprüft, ob alle Schulen auf einer Seite vorhanden sind, und sie dann filtert, um nur US/Kanadische Schulen, und stellt wieder sicher, dass die richtigen Schulen auf der Seite sind.Integrationstest mit Paginierung (Ruby on Rails)

test "Can view and search schools" do 
visit logout_path 
visit schools_path 
School.all.each do |school| 
    page.must_have_content(school.name) 
end 

find(:xpath, '//*[@name="filter[USA]"]/..').click 
School.all.each do |school| 
    page.must_have_content(school.name) if school.country == 'Canada' 
    page.wont_have_content(school.name) if school.country == 'USA' 
end 

find(:xpath, '//*[@name="filter[USA]"]/..').click 
School.all.each do |school| 
    page.must_have_content(school.name) 
end 

find(:xpath, '//*[@name="filter[Canada]"]/..').click 
School.all.each do |school| 
    page.wont_have_content(school.name) if school.country == 'Canada' 
    page.must_have_content(school.name) if school.country == 'USA' 
end 
end 

Das Problem ist, dass jetzt habe ich die Schulen paginierte, und so alle Schulen sind nicht auf der gleichen Seite, den Testfall machen scheitern. Ich muss den Integrationstest modifizieren, damit die Testfälle bestehen, obwohl die Schulen jetzt auf verschiedenen Seiten verteilt sind, mit 9 Schulen pro Seite. Ich habe versucht, die folgenden für den ersten Teil des Tests ohne Erfolg:

visit logout_path 
school_found = 0 
per_page = 9 
visit schools_path 
School.all.each do |school| 
    page.must_have_content(school.name) 
    school_found += 1 
    if (school_found == per_page) 
    click_on('Next ›') 
    end 
end 

Für die anderen Teile, die ich habe keine Ahnung, wo ich anfangen soll.

+2

Das ist ein ziemliches Szenario, das Sie dort haben, aber ich nehme an, die meisten Leute werden Ihnen sagen, dass Sie pro Test ein Szenario gleichzeitig einhalten müssen. Wenn Sie dies tun, werden sich die Dinge nicht aufeinander beziehen, und ich bin ziemlich sicher, dass Sie dann eine Vorstellung davon bekommen, wie Sie die spezifische Funktion, die Sie im Sinn haben, testen können. – unused

Antwort

0

Die Frage liefert nicht genügend Informationen. Ich hätte mehr Details über das Juwel, das ich benutzt habe, hinzugefügt und Bilder eingefügt. Außerdem ist dies eine zu große Frage für eine Q + A-Site.

Um dies zu tun, müssen Sie einfach durch die Schulen, indem Sie auf die Schaltfläche Weiter in der Paginierung Abschnitt nach der Überprüfung für alle 9 Schulen. Wenn Sie nur Schulen in den USA und Kanada überprüfen, sollten Sie nur zählen, wenn Sie eine Schule in den USA oder Kanada finden. Setzen Sie Ihre Zählung nach jedem Fall auf 0 zurück und fahren Sie mit dem nächsten Test fort. Wenn Sie auf die Schaltfläche Weiter klicken müssen, klicken Sie auf die Schaltfläche Erste, um zur Startseite zurückzukehren, bevor Sie zum nächsten Test übergehen.

test "Can view and search schools" do 

visit logout_path 

visit schools_path 
count = 0 
nextClicked = false 
select "Alphabetical", :from => "sort_by" 
School.all.order('name ASC').each do |school| 
    page.must_have_content(school.name) 
    count += 1 
    if count == 9 
    click_on("Next ›", :match => :first) 
    nextClicked = true if !nextClicked 
    end 
end 

click_on("« First", :match => :first) if nextClicked 
count = 0 
nextClicked = false 

find(:xpath, '//*[@name="filter[Canada]"]/..').click 
School.all.each do |school| 
    page.must_have_content(school.name) if school.country == 'USA' 
    page.wont_have_content(school.name) if school.country == 'Canada' 
    count += 1 if school.country == 'USA' 
    if count == 9 
    click_on("Next ›", :match => :first) 
    nextClicked = true if !nextClicked 
    end 
end 

click_on("« First", :match => :first) if nextClicked 
count = 0 
nextClicked = false 

find(:xpath, '//*[@name="filter[Canada]"]/..').click 
School.all.order('name ASC').each do |school| 
    page.must_have_content(school.name) 
    count += 1 
    if count == 9 
    click_on("Next ›", :match => :first) 
    nextClicked = true if !nextClicked 
    end 
end 

count = 0 
click_on("« First", :match => :first) if nextClicked 
nextClicked = false 

find(:xpath, '//*[@name="filter[USA]"]/..').click 
School.all.each do |school| 
    page.must_have_content(school.name) if school.country == 'Canada' 
    page.wont_have_content(school.name) if school.country == 'USA' 
    count += 1 if school.country == 'Canada' 
    if count == 9 
    click_on("Next ›", :match => :first) 
    nextClicked = true if !nextClicked 
    end 
end 

count = 0 
click_on("« First", :match => :first) if nextClicked 
nextClicked = false 

end 
1

Dies wäre besser gelöst, indem Sie die Paginierung Größe konfigurierbar, so für den Test könnte den Test zu einer Größe größer als die Gesamtgröße der Liste ändern und überprüfen Sie alles auf einer Seite, und setzen Sie es nach dem Test so weitere Tests kann immer noch überprüfen, ob die Paginierung korrekt erfolgt