модуль ActiveSupport::Testing::ErrorReporterAssertions
Открытые методы экземпляра
# File activesupport/lib/active_support/testing/error_reporter_assertions.rb, line 88
def assert_error_reported(error_class = StandardError, &block)
reports = ErrorCollector.record do
_assert_nothing_raised_or_warn("assert_error_reported", &block)
end
if reports.empty?
assert(false, "Expected a #{error_class.name} to be reported, but there were no errors reported.")
elsif (report = reports.find { |r| error_class === r.error })
self.assertions += 1
report
else
message = "Expected a #{error_class.name} to be reported, but none of the " \
"#{reports.size} reported errors matched: \n" \
"#{reports.map { |r| r.error.class.name }.join("\n ")}"
assert(false, message)
end
end Проверяет, что блок приводит к регистрации как минимум одного исключения в Rails.error.
Проверка проходит, если выполненный код в переданном блоке регистрирует соответствующее исключение.
assert_error_reported(IOError) do
Rails.error.report(IOError.new("Oops"))
end
Чтобы проверить дополнительные сведения о зарегистрированном исключении, можно использовать возвращаемое значение.
report = assert_error_reported(IOError) do # ... end assert_equal "Oops", report.error.message assert_equal "admin", report.context[:section] assert_equal :warning, report.severity assert_predicate report, :handled?
# File activesupport/lib/active_support/testing/error_reporter_assertions.rb, line 62
def assert_no_error_reported(&block)
reports = ErrorCollector.record do
_assert_nothing_raised_or_warn("assert_no_error_reported", &block)
end
assert_predicate(reports, :empty?)
end Проверяет, что блок не приводит к регистрации исключения в Rails.error.
Проверка проходит, если выполненный код в переданном блоке не регистрирует исключений.
assert_no_error_reported do perform_service(param: 'no_exception') end
# File activesupport/lib/active_support/testing/error_reporter_assertions.rb, line 118
def capture_error_reports(error_class = StandardError, &block)
reports = ErrorCollector.record(&block)
reports.select { |r| error_class === r.error }
end Перехватывает зарегистрированные ошибки внутри блока, соответствующие указанному классу ошибок.
reports = capture_error_reports(IOError) do
Rails.error.report(IOError.new("Oops"))
Rails.error.report(IOError.new("Oh no"))
Rails.error.report(StandardError.new)
end
assert_equal 2, reports.size
assert_equal "Oops", reports.first.error.message
assert_equal "Oh no", reports.last.error.message
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.