我在 Ruby 1.8.7 的 Windows 上使用 Cucumber 和 Aruba 运行应该是基本的 BDD 演示。这个想法是让一个简单的“问候”应用程序提示用户输入名称,然后按名称向他们问好。
Cucumber 场景如下所示:
# name_prompt.feature
Feature: Name prompt
In order to interact with the bot
As a friendly user
I want to tell the app my name
Scenario: Be asked
Given the application is running
Then I should see "What is your name?"
Scenario: Talk back
Given the application is running
And I type "Tim" and press Enter
Then I should see "Hello, Tim"
我的步骤实现使用了一些 Aruba 提供的函数,如下所示:
# cli_steps.rb
Given /^the application is running$/ do
run_interactive(unescape("ruby chatbot.rb"))
end
Then /^I should see "([^"]*)"$/ do |arg1|
assert_partial_output(arg1)
end
Given /^I type "([^"]*)" and press Enter$/ do |arg1|
type(arg1)
end
机器人本身非常简单,看起来像:
# chatbot.rb
$stdout.sync = true
puts "What is your name?"
name = gets.chomp
puts "Hello, #{name}"
在 Mac/Linux 上,这可以正常工作并通过所有场景。但是,在 Windows 上,我一直看到正在测试的输出assert_partial_output
不包括最后一行(“Hello,Tim”)。
我试过使用pp
的内容@interactive.stdout
,它应该包含程序的整个输出,但它只包含第一个“你叫什么名字?” 行,加上换行符。
Windows 上是否有任何问题会导致 Cucumber 和 Aruba 出现这种问题?为什么这些测试不通过?