2013-12-12 66 views
5

我知道Cucumber,您可以在給定步驟定義期間定義實例變量。 此實例變量成爲World範圍的一部分。 然後,您可以在When和Then的步驟定義期間訪問此實例變量。您是否可以在黃瓜的Given,When和Then步驟定義中定義實例變量

你能在什麼時候,然後進行步驟定義 定義實例變量也和在後來當再踩定義訪問它們?

如果有可能,在 何時和然後步驟定義過程中定義實例變量甚至是常見做法嗎?

謝謝。

回答

6

是的,你可以在任何步驟類型中設置實例變量。

例如,考慮到這個特點:

Feature: Instance variables 

Scenario: Set instance variables during all steps 
    Given a given step sets the instance variable to "1" 
    Then the instance variable should be "1" 
    When a when step sets the instance variable to "2" 
    Then the instance variable should be "2" 
    Then a then step sets the instance variable to "3" 
    Then the instance variable should be "3" 

和步定義:

Given /a given step sets the instance variable to "(.*)"/ do |value| 
    @your_variable = value 
end 
When /a when step sets the instance variable to "(.*)"/ do |value| 
    @your_variable = value 
end 
Then /a then step sets the instance variable to "(.*)"/ do |value| 
    @your_variable = value 
end 
Then /the instance variable should be "(.*)"/ do |value| 
    @your_variable.should == value 
end 

您將看到的場景通過,這意味着當再步驟都成功設置實例變量。

實際上,Given,When和Then只是彼此的別名。僅僅因爲您將步驟定義定義爲「給定」,它仍然可以稱爲「當」或「然後」。例如,上面的情況下仍然會通過如果所使用的步驟的定義爲:

Then /a (\w+) step sets the instance variable to "(.*)"/ do |type, value| 
    @your_variable = value 
end 
Then /the instance variable should be "(.*)"/ do |value| 
    @your_variable.should == value 
end 

注意,第一「然後」步驟的定義可以由「給定」和「當」在方案中使用。

至於是否是很好的做法,在設置時,然後步驟,它只不過是在給定的步驟,這樣做更壞的實例變量。理想情況下,您的任何步驟都不會在創建步驟耦合時使用實例變量。但是,實際上,我沒有通過使用實例變量遇到重大問題。

+0

你的回答幫了我很多。但是,我現在想:有沒有一種方法來檢查一個步驟計算出的最後一個值?我的意思的,而不是「耦合」的步驟參照一個共同的實例變量,可能我們只是檢查上一步「LAST_VALUE」?有沒有辦法呢? –

+0

@KeillRandor,我不知道這樣做的方法。這不是我聽說過有人在做的事情,所以可能需要對框架進行一些修改。 –

+0

好吧,我明白了。我正在通過設置實例變量來做到這一點,所以謝謝! –

相關問題