分页集成测试(Ruby on Rails)
问题描述:
我对我的Ruby on Rails代码进行了以下集成测试,该代码检查以确保所有学校都存在于页面上,然后将它们过滤为仅具有US /加拿大的学校,并再次确保正确的学校在网页上。分页集成测试(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
的问题是,我现在已经分页学校,所以所有的学校都不能在同一网页上,使测试案例失败。我需要修改集成测试,以便通过测试用例,即使学校现在分布在不同的页面上,每页有9所学校。我尝试了以下第一部分的测试无济于事:
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
对于其他部分我不知道从哪里开始。
答
该问题没有提供足够的信息。我应该添加更多关于我正在使用的宝石的详细信息,并包含图片。另外,对于Q + A网站来说,这个问题太多了。
要做到这一点,需要在检查每9所学校后,点击分页部分中的下一步按钮,简单地翻阅学校。要仅查看美国和加拿大的学校,只有当您分别找到美国或加拿大的学校时才应该计算。在每种情况下,将您的计数重置为0并继续进行下一个测试。另外,如果您确实需要点击下一步按钮,然后点击第一个按钮返回到起始页面,然后再进行下一个测试。
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
答
这可以通过使分页大小可配置来更好地解决,因此对于此测试,测试可以将其修改为大于总列表大小的大小,并检查一页上的所有内容,并在测试后重置它,以便进一步测试仍然可以检查分页是否正确发生
这是你到达那里的一个场景,但我想大多数人会告诉你一次只能在一个测试中坚持一个场景。如果你这样做了,事情就不会彼此相关,我很确定你的想法会明白你如何测试你想要的特定功能。 – unused