【问题标题】:Integration Testing with Pagination (Ruby on Rails)使用分页进行集成测试(Ruby on Rails)
【发布时间】:2016-07-12 22:09:52
【问题描述】:

我对我的 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

对于其他部分,我不知道从哪里开始。

【问题讨论】:

  • 这是一个相当不错的场景,但我想大多数人会告诉你每次测试一次坚持一个场景。如果您这样做,事情将不会相互关联,我很确定您会了解如何测试您想到的特定功能。

标签: ruby-on-rails ruby pagination


【解决方案1】:

通过使分页大小可配置可以更好地解决此问题,因此对于此测试,测试可以将其修改为大于总列表大小的大小并检查一页上的所有内容,并在测试后将其重置,以便进一步测试可以仍然检查分页是否正确

【讨论】:

    【解决方案2】:

    该问题没有提供足够的信息。我应该添加更多关于我正在使用的宝石的细节,并包括图片。此外,对于 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多