2014-09-11 43 views
0

背景中的步驟不能與示例結合使用。 Behat是一個限制嗎?爲什麼背景中的步驟不能與Behat中的示例結合

我有以下功能文件。

Background: 
     Given I have the login Page 
     When I login to the application using "<username>" 
     Then the list is displayed 
     When I select an item from the list 
     Then I am taken to the Dashboard 
     When I navigate to the Overview Page 
     Then the Overview Page is displayed 

@javascript @frontend @devlocal 
Scenario Outline: To verify the Overview page content 
     Then overview page main headings are displayed 
Examples: 
     | username | role   | 
     | RoleUser | ROLE_USER  |  
     | RoleAdmn | ROLE_ADMIN | 

這將產生錯誤: [貝哈特\小黃瓜\異常\ ParserException]
預期註釋或方案或輪廓或步驟令牌,但得到了對線實施例:15中的文件:在/ var /功能/概述.feature

我在「背景」中有這麼多步驟的原因是因爲這是進入頁面的邏輯流程。我有幾個使用這些步驟的場景。

我確實有這個問題的工作解決方案,它使用「場景」中的「背景」中的所有步驟。這工作絕對好。不過,對於此功能,我有5種不同的場景,並且如果我在所有5種場景中複製並粘貼相同的步驟,它看起來絕對凌亂和麻煩。 我認爲這是我們使用背景部分的主要原因?

這裏是我使用的那一刻是什麼:

背景: 鑑於我在登錄頁面

@javascript @frontend @devlocal 
Scenario: To verify the Overview page content 
     When I login to the application using "<username>" 
     Then the list is displayed 
     When I select an item from the list 
     Then I am taken to the Dashboard 
     When I navigate to the Overview Page 
     Then the Overview Page is displayed 
     Then overview page main headings are displayed 
Examples: 
     | username | role   | 
     | RoleUser | ROLE_USER  |  
     | RoleAdmn | ROLE_ADMIN | 

想象一下,從所有不同的場景場景部分的所有這些步驟

回答

1

如果沒有場景輪廓,絕對麻煩和麻煩。我可以解決這個問題,但這只是它的工作方式。場景背景應該與該功能中的所有場景相結合,並應該作爲獨立塊運行。如果您有五個場景大綱和一個場景,則您的功能無法使用,因爲背景不知道如何處理<username>

理論上這可能相當容易實現,但對Behat代碼稍微熟悉一些,我覺得這將是一個非常非常大的變化......事實上,我提出this issue來提出一個新的功能請求,它會很高興有這樣的事情。你可以訂閱,看看這些人說什麼。我幾乎有信心,這個很酷的因素不會勝過複雜性。

另一方面,沒有什麼能阻止你將這個邏輯合併到另一個步驟,並在那裏傳遞必要的參數。您應該能夠從貂皮中訪問其他上下文,並以標準方法調用步驟。將這個邏輯從特徵移到上下文中會稍微清理一些東西,但是imho這有點冒險,而且不是一個更好的方法。事實上,我不認爲你現在有什麼問題。

此外,從邏輯角度來看,您正試圖在背景中測試太多東西。相反,您可以創建另一個場景來測試背景中的所有內容,而在其他五個場景中,開始時只有兩個步驟,而不是六個(When I login to the application using "<username>"Then I successfully navigate the Overview Page is displayed)。

+0

謝謝伊恩。將6個步驟合併爲2個步驟意味着什麼?這是否意味着將所有這6個步驟的邏輯合併到2中。這將會有點冗餘,不是這樣(在不同情況下再次編寫相同的代碼) – 2014-09-11 12:31:26

+1

您的背景包含每個大綱「繼承」的公共邏輯。您可以將該通用邏輯從背景中分離到另一個場景中,因此不必檢查每個場景大綱中的後臺步驟是否通過,而是可以在單獨的場景大綱中執行相同的操作,從而減少所有其他五個場景大綱的負載。在那裏你只需要登錄並進入特定場景測試開始的頁面。 – 2014-09-11 12:49:43

+1

在代碼中使用相同的字母在某些方面也可以被認爲是冗餘的。你有侷限性,你想找到儘可能少的重複自己的方法,你可以重新安排你的代碼,讓它變得更幹,這樣可以使事情變得更好。 – 2014-09-11 12:52:36