Как отобразить стандартный вывод, когда Rspe c Ожидает {}. (Захватить) глотает вывод, если предложение Ожидает {} вызывает исключение? - PullRequest
0 голосов
/ 28 февраля 2020

Когда тест не пройден, полезно иметь все данные, но если я собираю стандартный вывод, и перед тестированием вывода возникает исключение, стандартный вывод теряется:

expect {
  expect(tsi.compute_test_filter).to(eq(''))
}.to(output(regexlines(
              '== Computing test mapping on IOS-1234_featurebranch',
              '== Ignoring computed test mapping: calabash.branch=CAL-2345 starts with CAL-',
            )).to_stdout)

Здесь, если внутреннее ожидание выдает исключение, это означает, что у меня нет стандартного выхода, чтобы помочь мне быстро определить проблему: скажем, сообщение «Игнорирование вычисленного тестового отображения» будет другим, и это признак того, почему внутреннее ожидание не удалось, и поможет мне быстрее диагностировать чем пошаговое выполнение кода.

В настоящее время я использую это альтернативное «ожидание»:

def expect_noisy
  expect do
    yield
  rescue Exception => e
    # Is there no official way to get the currently running tests's name?
    STDOUT << "\n========\nnoisy test: #{self.instance_variable_get(:@__inspect_output)} ($stdout isa #{$stdout.class})\n"
    STDOUT << "noisy exception: #{e}\n"
    STDOUT << "stdout...\n" << $stdout.string << "...end stdout\n" if $stdout.respond_to? :string
    STDOUT << "stderr...\n" << $stderr.string << "...end stderr\n" if $stderr.respond_to? :string
    raise
  end
end

Есть ли «правильный» способ сделать это в RSpe c, или следует Я поднимаю ошибку с ними?

(«правильно», я не ищу критику, что я не должен вкладывать подобные утверждения - исключение легко может быть в самом коде.)

...