Вы выполняете это по направляющим? Если так, это не инициализация RSPEC, это медленно, это - направляющие. Направляющие должны инициализировать всю кодовую базу и Ваш прежде, чем выполнить спецификации. Ну, это не делает , имеют к, но это делает. RSpec работает довольно быстро за мной в соответствии с моими маленькими проектами ненаправляющих.
Или просто так:
def title
output.data.title rescue nil
end
def try_chain
yield
rescue NoMethodError
nil
end
def title
try_chain { output.data.title }
end
Thoughtbot только что рассказал об этом в своем блоге , используя то, что они называют мелким нулем:
def swallow_nil
yield
rescue NoMethodError
nil
end
Итак, в их примере они могли сделать что-то вроде:
campaign = swallow_nil { supporter.politician.campaign }
Или, в вашем случае,
def title
swallow_nil { output.data.title }
end
Однако имейте в виду, что любые ваши ошибки также будут проглочены и их будет трудно найти, особенно потому, что они перехватывают все NoMethodErrors, которые могут быть вызваны другими частями ваш код (хотя, если вы используете тестирование, это очень помогает).
Другой подход - использовать andand , тогда ваш код будет
def title
output.andand.data.andand.title
end
Не таким чистым, как swallow_nil, но, вероятно, лучше всего не просто игнорировать все.