Когда тест не пройден, полезно иметь все данные, но если я собираю стандартный вывод, и перед тестированием вывода возникает исключение, стандартный вывод теряется:
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, или следует Я поднимаю ошибку с ними?
(«правильно», я не ищу критику, что я не должен вкладывать подобные утверждения - исключение легко может быть в самом коде.)