如何在黄瓜功能之间使用通用/共享“块”?

时间:2011-10-04 10:46:30

标签: cucumber

我是黄瓜的新手,但享受它。

我目前正在编写一些Frank测试,并希望在多个功能中重复使用黄瓜脚本块 - 如果可能的话,我想在黄瓜级别执行此操作(不在ruby中)。

例如,我可能有4个脚本,都是从执行相同的登录步骤开始的:

  given my app has started
     then enter "guest" in "user-field"
     and enter "1234" in "password-field"
     and press "login"
  then I will see "welcome"
  then *** here's the work specific to each script ***

有没有办法在多个脚本之间共享前5行?某种“包含”语法?

2 个答案:

答案 0 :(得分:25)

通常有两种方法:

Backgrounds

如果您希望在功能文件中每个场景之前运行一系列步骤:

Background:
     given my app has started
     then enter "guest" in "user-field"
     and enter "1234" in "password-field"
     and press "login"
     then I will see "welcome"

Scenario: Some scenario
    then *** here's the work specific to this scenario ***

Scenario: Some other scenario
    then *** here's the work specific to this scenario ***

Calling steps from step definitions

如果您需要在不同的功能文件中使用“块”步骤,或者背景部分不适合,因为某些场景不需要它,那么创建一个调用其他场景的高级步骤定义:

Given /^I have logged in$/ do
    steps %Q {
         given my app has started
         then enter "guest" in "user-field"
         and enter "1234" in "password-field"
         and press "login"
         then I will see "welcome"
    }
end

此外,在这种情况下,我会被诱惑而不是根据单独的步骤实现您的常用步骤,而是创建一个步骤定义:(假设Capybara)

Given /^I have logged in$/ do
    fill_in 'user-field', :with => 'guest'
    fill_in 'password-field', :with => '1234'
    click_button 'login'
end

这为你的步骤定义带来了更多的意义,而不是创建一系列页面交互,需要在你意识到'哦,这部分让我登录'之前需要进行心理解析。

答案 1 :(得分:0)

建议使用更好的方法来使用红宝石级"方法"从代码维护和调试角度代码重用代码而不是嵌套步骤。

以下是更详细的链接: Reuse Cucumber steps