【问题标题】:Testing Pagination Features with Cucumber用 Cucumber 测试分页功能
【发布时间】:2010-12-05 05:51:42
【问题描述】:

我正在学习并喜欢 Cucumber,现在有一个我不确定通过 BDD 继续进行的最佳方式的功能:分页。我有场景(在我的脑海中)有零页、一页、几页等,并且我想确保某些记录在某些页面上,确保“下一步”按钮不是链接最后一页等。

我将使用 will_paginate,所以基本上我想弄清楚如何为特定的项目列表(例如书籍)BDD 其功能。

我确信我能应付得来,但我觉得这应该很常见,并想看看其他人做了什么。任何人都可以推荐一篇文章,或者给我一些示例代码,甚至可以自己拍摄一个示例吗?

【问题讨论】:

  • 您正在复制 will_paginate 已经测试过 IMO 的内容,这主要是一件坏事。它已经过测试,最好假设它可以工作。
  • 我不想对 will_paginate 进行单元测试,我想通过 Cucumber 驱动我的应用程序的行为。功能与实现无关,因此我应该能够将 will_paginate 换成其他东西,重新运行我的 Cucumber 测试(无需修改它们),并从客户的角度知道应用程序按预期工作。

标签: ruby-on-rails pagination cucumber bdd


【解决方案1】:

您可能会使用scenario outlines 来减少功能文件中的重复,但请注意它会扩展到大量实际运行的场景,因此它会比您慢' d 期望。假设每页有 5 本书,这样的事情可能会奏效。我会将步骤定义留作练习,但它们应该非常简单。

我还应该提一下,我实际上并没有运行它,所以对任何语法错误持保留态度。

Feature: Book Browsing Pagination

  Scenario: No results
    Given I have 0 books
    When I view all books
    Then I should see "No results" on the page

  Scenario: Some results
    Given I have 3 books
    When I view all books
    Then I should see "Book 1"
    And I should see "Book 2"
    And I should see "Book 3"

  Scenario: Page links
    Given I have <count> books
    When I view all books from page <page>
    Then I should see a link to page <target page>

    Examples:
      | count | page | target page |
      |   8   |   1  |       2     |
      |   8   |   2  |       1     |
      |  13   |   1  |       2     |
      |  13   |   1  |       3     |
      |  13   |   2  |       1     |
      |  13   |   2  |       3     |
      |  13   |   3  |       1     |
      |  13   |   3  |       2     |

  Scenario: Page links for current page
    Given I have <count> books
    When I view all books from page <page>
    Then I should see a disabled pagination link to page <page>

    Examples:
      | count | page |
      |   8   |  1   |
      |   8   |  2   |
      |  13   |  1   |
      |  13   |  2   |
      |  13   |  3   |

  Scenario: Next Page links
    Given I have <count> books
    When I view all books from page <page>
    Then I should see a link "Next Page"

    When I click "Next Page"
    Then I should be on page <next page> # assert against query params maybe?
    # alternately, to keep page requests down, one could use something like:
    # Then I should see a link "Next Page" going to "?p=<next page>"

    Examples:
      | count | page | next page |
      |   8   |   1  |      2    |
      |  13   |   1  |      2    |
      |  13   |   2  |      3    |

  Scenario: Next Page links on last page
    Given I have <count> books
    When I view all books from page <page>
    Then I should see a disabled pagination link "Next Page"

    Examples:
      | count | page |
      |   8   |   2  |
      |  13   |   3  |

类似的场景可用于检查上一页/第一页/最后一页和下一页的链接状态,如果您愿意,您可以添加一些后续点击到页面链接场景,类似于下一页场景正在执行的操作。您可能还想添加额外的示例来检查您的分页是否恰好为 5,因为如果分页为每页 6 个,我选择的示例也会通过。取决于您检查分页功能的具体目标。

如果您最终决定选择 will_paginate 以外的其他内容,那么您需要考虑更改的唯一内容可能是一些步骤(例如禁用的分页步骤)。

正如你提到的要求链接,这也可能是一篇很好的博文;)

【讨论】:

  • 哇。正是我想要的。感谢您花时间提供如此清晰详细的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
相关资源
最近更新 更多