2009-10-09 3 views
3

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

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

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

+1

Вы дублируя то, что will_paginate уже опробовал ИМО, которая в основном плохо. Это уже проверено, лучше предположить, что он работает. –

+2

Я не хочу, чтобы модуль test will_paginate, я хочу управлять поведением моего приложения через Cucumber. Возможности не привязаны к реализациям, поэтому я должен иметь возможность поменять sw_ will_paginate на что-то еще, повторно запустить тесты Cucumber (без их модификации) и знать, что приложение работает по желанию с точки зрения клиента. – SingleShot

ответ

18

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

Подобные сценарии могут быть использованы для проверки состояния линии связи Предыдущий/Первая/Последняя, ​​как для Next, и вы могли бы добавить последующую щелкать на странице Ссылки сценарий, похожий на то, что следующий сценарий страницы делает если вы разыскивается. Вы также можете добавить дополнительные примеры, чтобы проверить, что ваша разбивка на страницы составляет ровно 5, так как примеры, которые я выбрал, также будут проходить, если число страниц составляет 6 на страницу. Зависит от того, что именно ваши цели предназначены для проверки функциональности разбиения на страницы.

Если вы в конечном итоге решите что-то другое, кроме will_paginate, то единственными вещами, которые вам нужно будет посмотреть на изменение, могут быть несколько шагов (например, отключенные страницы с разбивкой по страницам).

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

+0

Ничего себе. Именно то, что я искал. Спасибо, что потратили время на предоставление такого четкого и подробного ответа. – SingleShot

Смежные вопросы