两个例子都是STDOUT,但黄瓜只能看到第一个。第二种情况失败了:
Then the stdout should contain "test" # aruba-0.4.11/lib/aruba/cucumber.rb:82
expected "" to include "test" (RSpec::Expectations::ExpectationNotMetError)
features/test.feature:13:in `Then the output should contain "test"'
功能:
Scenario: echo test
Given a blank slate
When I run `echo "test"`
The stdout should contain "test"
Scenario: puts test
Given a blank slate
When I start the program
The stdout should contain "test"
步骤定义:
When /^I start the program$/ do
TestModule::Main.new.start
end
代码:
module TestModule
class Main
def initialize
end
def start
$stdout.puts "test"
end
end
end
答案 0 :(得分:0)
我对Aruba并不熟悉,但快速查看它source code表示它对STDOUT(或任何输出)仅的断言适用于它启动的进程本身,并不是所有写入STDOUT的内容。在第二种情况下,您自己调用的代码超出了Aruba的控制范围,因此不会跟踪它的输出。
如果你考虑一下,它可能无法以任何其他方式工作 - 如果Aruba捕获所有STDOUT断言,那么它将包含Cucumber自己的测试输出......
看起来你正在尝试在进程中测试程序而不使用Aruba来调用单独的Ruby进程。如果是这种情况,我建议修改程序,以便可以传递STDOUT替换,例如
def initialize(output=$stdout)
然后当你启动代码时:
When /^I start the program$/ do
TestModule::Main.new(@output).start
end
你可以改变你的断言:
Then the stdout should contain "(.+)" do |string|
@output.should include string
end