2009-10-09 118 views
3

我正在學習和喜歡黃瓜,現在有一個功能我不確定通過BDD進行分析的最佳方式:分頁。我有一些場景(在我的腦海中),其中有零頁,一頁,幾頁等,以及我想確保某些記錄在某些頁面上的位置,確保「下一步」按鈕不是鏈接時最後一頁等。黃瓜測試分頁功能

我將使用will_paginate,所以基本上我想弄清楚如何爲特定的項目列表(例如書籍)BDD其功能。

我敢肯定,我可以混淆它,但我覺得這應該是常見的,並希望看到別人做了什麼。任何人都可以推薦一篇文章,或者將我指向一些示例代碼,甚至可以自己做一個例子嗎?

+1

你複製什麼will_paginate已經IMO測試,其中大部分是一件壞事。它已經過測試,最好假設它有效。 – 2009-10-09 12:36:48

+2

我不想單元測試will_paginate,我想通過Cucumber驅動我的應用程序的行爲。功能與實現無關,因此我應該可以將will_paginate替換爲其他內容,重新運行我的Cucumber測試(不需要修改它們),並且從客戶的角度瞭解應用程序的工作情況。 – SingleShot 2009-10-09 15:19:51

回答

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 | 

類似的情況,可以用於檢查上一頁/第一/最後爲接下來的鏈路狀態,你可以添加一些後續點擊此網頁的鏈接類似於在下一頁的情況是,如果你在做方案通緝。您可能還需要添加額外的示例來檢查您的分頁是否恰好爲5,因爲如果每頁的分頁數爲6,我選擇的示例也會通過。取決於您的目標是檢查分頁功能。

如果你最終決定了除了will_paginate以外的東西,那麼你需要考慮改變的唯一的東西可能是幾個步驟(如禁用分頁的步驟)。

正如你所提到要求的鏈接,這可能使一個很好的博客文章也;)

+0

哇。正是我在找什麼。感謝花時間提供這樣一個清晰而詳細的答案。 – SingleShot 2009-10-13 16:55:19