2016-05-08 45 views
1

我在Cucumber Background部分放置了一个调试打印语句。为什么黄瓜背景的输出只显示一次?

由于Background对于每个场景都会执行一次,因此我预计每个场景都会看到Background的输出。但是输出只显示一次。为什么?

下面是一个简单的例子,说明我的问题:

计算器/功能/ adding.feature:

Feature: Adding 

Background: 
    Given calculator is ready 

Scenario: Add two numbers 
    Given the input "2" and "2" 
    When the calculator is run 
    Then the output should be "4" 

Scenario: Add another two numbers 
    Given the input "2" and "3" 
    When the calculator is run 
    Then the output should be "5" 

计算器/功能/ step_definitions/calculator_steps.rb:

counter = 0 

Given(/^calculator is ready$/) do 
    puts "*** background ***" 
    counter += 1 
end 

Given(/^the input "([^"]*)" and "([^"]*)"$/) do |x1, x2| 
    @x1 = x1 
    @x2 = x2 
end 

When(/^the calculator is run$/) do 
    @output = `ruby calc.rb #{@x1} #{@x2}` 
end 

Then(/^the output should be "([^"]*)"$/) do |expected_output| 
    expect(@output).to eq(expected_output) 
    puts "counter=#{counter}" 
end 

calculator/calc.rb:

x1 = ARGV[0].to_i 
x2 = ARGV[1].to_i 

print ("#{x1+x2}") 

这里是输出场景被执行时:

$ cucumber 
Feature: Adding 

    Background:     # features/adding.feature:3 
    Given calculator is ready # features/step_definitions/calculator_steps.rb:3 
    *** background *** 

    Scenario: Add two numbers  # features/adding.feature:6 
    Given the input "2" and "2" # features/step_definitions/calculator_steps.rb:8  
    When the calculator is run # features/step_definitions/calculator_steps.rb:13 
    Then the output should be "4" # features/step_definitions/calculator_steps.rb:17 
     counter=1 

    Scenario: Add another two numbers # features/adding.feature:11 
    Given the input "2" and "3"  # features/step_definitions/calculator_steps.rb:8 
    When the calculator is run  # features/step_definitions/calculator_steps.rb:13 
    Then the output should be "5" # features/step_definitions/calculator_steps.rb:17 
     counter=2 

2 scenarios (2 passed) 
8 steps (8 passed) 
0m0.094s 

我期望看到的线*** background ***两次(因为Background被执行两次),但它是仅示出一次。为什么?

回答

1

在黄瓜上打印的信息Background步骤只打印一次,因为当黄瓜执行一个步骤并在黄瓜的控制下打印时,捕获标准输出。在Background步骤中打印的消息与步骤名称一起打印:仅在输出开始时打印一次。

因此,每次Background运行时查看打印的消息的方式与每次运行Background时查看步骤名称的方式相同。已经有了一个问题和答案,但它不适用于当前版本的Cucumber(我有2.3.3),所以我写了一个新问题的答案,显示how to print everything that Background prints before every scenario

+0

感谢Dave,您为Cucumber 2.3.3所描述的解决方案适用于我,并且由于这通常用于调试目的,因此在本地修改gem并不是问题。 –