4

我有一些 ruby​​ 测试,它们调用不同的模块、类,它们详细说明了它们在执行过程中对一些“放置”命令所做的事情。

如果您在控制台中运行这些测试,那么您将在控制台中看到“puts”命令的输出,但如果您使用以下选项运行测试:

ruby --format html --output file.html

那么所有这些信息都会丢失。有没有办法在 HTML 报告中记录简单的字符串消息?

4

2 回答 2

0

我尝试了以下步骤:

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并不是真正的最佳实践,因此您可能需要考虑完全删除它......

于 2012-10-17T23:25:35.123 回答
0

您可以记住每个场景的 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

然后你可以在需要这些方法的地方包含这个模块

于 2013-03-18T14:51:36.440 回答