Как напечатать из объекта в тот же поток вывода, что и Capybara / Cucumber - PullRequest
0 голосов
/ 12 марта 2019

Всякий раз, когда я использую оператор 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" из области видимости, он будет печататься в той же нити, что и капибара / огурец.

1 Ответ

0 голосов
/ 12 марта 2019

Вывод, который вы видите из огурца, выводится из форматера (ов) огурца, который вы используете. Вызов puts внутри определения шага вызывает puts в форматере, который затем покажет его в правильном месте в выходных данных. Проблема в том, что если вы вызываете puts из другого объекта (например, класса в вашем приложении), он фактически вызывает Kernel#puts, о котором форматер огурца не имеет никакого представления.

Вы можете получить то, что хотите, записав в регистратор Cucumber вместо Kernel#puts в коде определения без пошагового вызова, вызвав что-то вроде

Cucumber.logger.info 'text to log'`
...