Тестирование функций пагинации с огурцом - PullRequest
3 голосов
/ 09 октября 2009

Я учусь и люблю огурец, и теперь у меня есть функция, в которой я не уверен, что лучший способ продолжить через BDD: разбиение на страницы. У меня есть сценарии (на мой взгляд), где есть ноль страниц, одна страница, несколько страниц и т. Д., И где я хочу убедиться, что определенные записи находятся на определенных страницах, убедитесь, что кнопка «Далее» не является ссылкой, когда на последняя страница и т. д.

Я буду использовать will_paginate, поэтому, по сути, я хочу выяснить, как BDD его функции для определенного списка предметов, например, книг.

Я уверен, что смогу разобраться с этим, но я чувствую, что это должно быть обычным делом, и хотел бы посмотреть, что сделали другие. Кто-нибудь может порекомендовать статью, или указать мне пример кода, или даже самим попробовать пример?

1 Ответ

19 голосов
/ 13 октября 2009

Возможно, вам не удастся использовать наброски сценария , чтобы сохранить повторение в вашем файле возможностей, но имейте в виду, что он расширится до очень большого числа фактически запущенных сценариев, поэтому он будет быть медленнее, чем вы ожидаете. Что-то вроде этого, вероятно, должно работать, предполагая 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, то единственное, на что вам нужно обратить внимание, это несколько шагов (например, отключенные пагинации).

И, как вы упомянули, прося ссылки, это также может стать хорошим постом в блоге;)

...