如何从对象打印到与 Capybara/Cucumber 相同的输出线程

How to print from object into same output thread as Capybara/Cucumber

每当我在 class 中使用 puts 语句时,它甚至在步骤开始之前就被打印出来,然后通常的 Capybara 输出将开始显示在它下面。

    SF-NR-2:work nr$ cucumber --tags @homepage-tests
Using the default profile...
@homepage-tests
Feature: Homepage Tests

TEST PRINT
  #### Homepage Test
  @bvt
  Scenario: Homepage loads in portrait mode # features/web/homepage.feature:7
    Given I go to the homepage
TEST PRINT
    And the homepage loads
1 scenario (1 passed)
2 steps (2 passed)
0m5.041s

我加了 puts "TEST PRINT" 到每个步骤,但它在每个步骤之前打印。如果我将 puts "TEST PRINT" 拉出 class 范围,它将在与 capybara/cucumber 正在打印的同一线程中打印。

您从 Cucumber 看到的输出是您正在使用的 Cucumber 格式化程序的输出。在步骤定义中调用 puts 会在格式化程序上调用 puts,然后格式化程序会将其显示在输出数据中的正确位置。问题是,如果您从另一个对象(例如您的应用程序中的 class)内部调用 puts,它实际上是在调用 Kernel#puts,黄瓜格式化程序对此一无所知。

在非步骤定义代码中,通过调用

之类的东西,您可以通过写入 Cucumber 记录器而不是 Kernel#puts 来获得您想要的内容
Cucumber.logger.info 'text to log'`