Как вызвать 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 (по идентификатору). Я обычно стараюсь не использовать их для проверки содержимого тегов.

Другие вопросы по тегам