我有一些 ruby 测试,它们调用不同的模块、类,它们详细说明了它们在执行过程中对一些“放置”命令所做的事情。
如果您在控制台中运行这些测试,那么您将在控制台中看到“puts”命令的输出,但如果您使用以下选项运行测试:
ruby --format html --output file.html
那么所有这些信息都会丢失。有没有办法在 HTML 报告中记录简单的字符串消息?
我有一些 ruby 测试,它们调用不同的模块、类,它们详细说明了它们在执行过程中对一些“放置”命令所做的事情。
如果您在控制台中运行这些测试,那么您将在控制台中看到“puts”命令的输出,但如果您使用以下选项运行测试:
ruby --format html --output file.html
那么所有这些信息都会丢失。有没有办法在 HTML 报告中记录简单的字符串消息?
我尝试了以下步骤:
When /^I do something$/ do
puts "Hello"
end
Then /^something happens$/ do
end
...使用以下命令:
cucumber -f html -o results.htm
...当我在浏览器中打开results.html
文件时,它会在显示步骤后显示“Hello”消息。我已经附上了 HTML 输出的相关部分,所以你可以看到输出在puts
那里:
<!-- the first step -->
<li id='features_thing_feature_4' class='step passed'>
<div class="step_name">
<span class="keyword">When </span>
<span class="step val">I do something</span>
</div>
<div class="step_file">
<span>features/step_definitions/thing_steps.rb:1</span>
</div>
</li>
<!-- anything that the above step passed to `puts` -->
<li class="step message">Hello</li>
<!-- the second step -->
<li id='features_thing_feature_5' class='step passed'>
<div class="step_name">
<span class="keyword">Then </span>
<span class="step val">something happens</span>
</div>
<div class="step_file">
<span>features/step_definitions/thing_steps.rb:5</span>
</div>
</li>
这表明当 cucumber 的puts
方法被调用(即:直接从一个步骤中)时,输出将包含在 html 输出中。但是,如果puts
调用来自其他地方(例如:您的模块),那么它将不会被包括在内。您可以考虑将puts
呼叫从模块转移到步骤。此外,使用puts
并不是真正的最佳实践,因此您可能需要考虑完全删除它......
您可以记住每个场景的 Before 钩子中的 World:
# features/support/env.rb
Before do |scenario|
$world = self
end
然后在外部世界的支持类和模块中,您可以将 puts 用作:
$world.puts 'something'
您还可以将 Cucumber 实例变量获取/设置为:
$world.instance_variable_get(:@user)
$world.instance_variable_set(:@user, user)
我也更喜欢将这两种方法提取到帮助程序以获得更好的可见性:
module Helpers
def get_scenario_variable(symbol)
$world.instance_variable_get(symbol)
end
def set_scenario_variable(symbol, value)
$world.instance_variable_set(symbol, value)
end
end
然后你可以在需要这些方法的地方包含这个模块