为什么黄瓜背景的输出只显示一次?
Why is the output from a Cucumber Background shown only once?
我在 Cucumber Background
部分中放置了一条调试打印语句。
因为 Background
对每个场景都执行一次,所以我希望每个场景都能看到 Background
的输出一次。但是输出只显示一次。为什么?
这是一个简单的例子来说明我的问题:
calculator/features/adding.特征:
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"
calculator/features/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
被执行了两次),但它只显示了一次。为什么?
在 Cucumber Background
步骤中打印的消息只打印一次,因为 Cucumber 在执行步骤时捕获标准输出并在 Cucumber 的控制下打印它。在 Background
个步骤中打印的消息与步骤名称一起打印:仅一次,在输出的开头。
每次 Background
运行时查看打印消息的方式与每次运行 Background
时查看步骤名称的方式相同。已经有一个问题和答案,但它不适用于当前版本的 Cucumber(我有 2.3.3),所以我写了一个新的答案来显示 how to print everything that Background
prints before every scenario.
我在 Cucumber Background
部分中放置了一条调试打印语句。
因为 Background
对每个场景都执行一次,所以我希望每个场景都能看到 Background
的输出一次。但是输出只显示一次。为什么?
这是一个简单的例子来说明我的问题:
calculator/features/adding.特征:
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"
calculator/features/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
被执行了两次),但它只显示了一次。为什么?
在 Cucumber Background
步骤中打印的消息只打印一次,因为 Cucumber 在执行步骤时捕获标准输出并在 Cucumber 的控制下打印它。在 Background
个步骤中打印的消息与步骤名称一起打印:仅一次,在输出的开头。
每次 Background
运行时查看打印消息的方式与每次运行 Background
时查看步骤名称的方式相同。已经有一个问题和答案,但它不适用于当前版本的 Cucumber(我有 2.3.3),所以我写了一个新的答案来显示 how to print everything that Background
prints before every scenario.