Как вызвать "time_ago_in_words" из FunctionalTest?
Я использую функцию time_ago_in_words в представлении, и мне нужно проверить результат в FunctionalTest.
Но тест не может видеть вспомогательную функцию time_ago_in_words.
Что мне делать, чтобы использовать эти вспомогательные методы из FunctionalTests?
Ответы
Ответ 1
Включите модуль ActionView::Helpers::DateHelper
в файлы test_helper.rb
или test.rb
. И что это, с тестовой консоли:
>> time_ago_in_words(3.minutes.from_now)
NoMethodError: undefined method `time_ago_in_words' for #<Object:0x3b0724>
from (irb):4
from /Users/blinq/.rvm/rubies/ruby-1.9.1-p376/bin/irb:15:in `<main>'
>> include ActionView::Helpers::DateHelper
=> Object
>> time_ago_in_words(3.minutes.from_now)
=> "3 minutes"
Ответ 2
Недавно у меня была аналогичная проблема, когда я пытался получить доступ к этой функции из API, поэтому я завернул ее в драгоценный камень, называемый timeywimey. Проверьте это: https://github.com/onetwopunch/timeywimey#usage
Он позволяет вам получить доступ к этому помощнику из любого места в проекте Rails, а также в Sinatra и в собственном проекте ruby.
Ответ 3
Я добавил в rails_helper.rb
config.include ActionView::Helpers::DateHelper
и работа, спасибо @jpemberthy!
Ответ 4
Что именно вы пытаетесь протестировать? Вам не нужно проверять поведение самого time_ago_in_words
, потому что это связано с собственными тестами Rails. Если вы тестируете один из ваших собственных помощников, который использует time_ago_in_words
, вывод может быть проверен в вспомогательном тесте (который наследуется от ActionView::TestCase
).
Функциональные тесты предназначены для проверки поведения контроллеров (какой шаблон они визуализируют, разрешают ли они доступ, перенаправление и т.д.), которые могут включать проверку наличия определенных тегов HTML (по id). Обычно я стараюсь не использовать их для проверки содержимого тегов.