Как вызвать time_ago_in_words из FunctionalTest?
Я использую функцию time_ago_in_words в представлении, и мне нужно проверить вывод в FunctionalTest.
Но тест не может видеть вспомогательную функцию time_ago_in_words.
Что я должен сделать, чтобы использовать эти вспомогательные методы из FunctionalTests?
4 ответа
Включить 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"
Я добавил на rails_helper.rb
config.include ActionView::Helpers::DateHelper
и работа, спасибо @jpemberthy!
Недавно у меня была похожая проблема, когда я пытался получить доступ к этой функции из API, поэтому я обернул ее в гем под названием timeywimey. Проверьте это: https://github.com/onetwopunch/timeywimey
Он позволяет вам получить доступ к этому помощнику из любого места в проекте Rails, а также в Sinatra и в собственном проекте ruby.
Что именно вы пытаетесь проверить? Вам не нужно проверять поведение time_ago_in_words
сам, потому что это покрыто собственными тестами Rails. Если вы тестируете одного из ваших собственных помощников, который использует time_ago_in_words
, вывод может быть проверен в тесте помощника (который наследует от ActionView::TestCase
).
Функциональные тесты предназначены для проверки поведения контроллеров (какой шаблон они отображают, разрешают ли они доступ, перенаправление и т. Д.), Что может включать проверку наличия определенных тегов HTML (по идентификатору). Я обычно стараюсь не использовать их для проверки содержимого тегов.