Как перехватить вывод программы оболочки из cucumber/aruba?

Я хочу захватить вывод, который я запускаю из файла объектов огурца.

Я создал одну программу-скрипт и поместил ее в /usr/local/bin/, чтобы она была доступна из любой точки системы.

abc_qa.sh -

arg=$1
if [[ $arg = 1 ]]
then
    echo $(date)
fi

структура проекта огурца -

Аруба -

,

Features── особенности

│ ├── поддержка

│ │ └── env.rb

Use └── use_aruba_cucumber.feature

├── Gemfile

Gemfile -

source 'https://rubygems.org'
gem 'aruba', '~> 0.14.2'

env.rb -

require 'aruba/cucumber'

use_aruba_cucumber.feature -

Feature: Cucumber
 Scenario: First Run
    When I run `bash abc_qa.sh 1`

Я хочу записать этот вывод программы abc_qa.sh в самом огурце и сравнить правильность или неправильность этой даты с помощью любого простого теста и сделать этот тест успешным.

1 ответ

Решение

Ты можешь использовать %x(command) чтобы получить стандартный вывод вашей команды.

Затем вы можете использовать Time.parse для конвертации "Sat Nov 5 12:04:18 CET 2016" в 2016-11-05 12:04:18 +0100 как объект Time, и сравните его с Time.now:

require 'time'
time_from_abc_script = Time.parse(%x(bash abc_qa.sh 1))
puts (Time.now-time_from_abc_script).abs < 5 # No more than 5s difference between 2 times

Вы можете использовать это логическое значение в любом тестовом файле.

Например:

В features/use_aruba_with_cucumber.feature:

Feature: Cucumber
 Scenario: First Run
  When I run `bash abc_qa.sh 1`
  Then the output should be the current time

а также features/step_definitions/time_steps.rb:

require 'time'

Then(/^the output should be the current time$/) do
  time_from_script = Time.parse(last_command_started.output)
  expect(time_from_script).to be_within(5).of(Time.now)
end
Другие вопросы по тегам