如何从对象打印到与 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'`
每当我在 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'`