Как вызвать time_ago_in_words из FunctionalTest? - PullRequest
17 голосов
/ 11 февраля 2010

Я использую функцию time_ago_in_words в представлении, и мне нужно проверить вывод в FunctionalTest.

Но тест не может видеть вспомогательную функцию time_ago_in_words.

Что я должен сделать, чтобы использовать эти вспомогательные методы из FunctionalTests?

Ответы [ 4 ]

41 голосов
/ 11 февраля 2010

Включите модуль 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"
1 голос
/ 26 января 2018

Я добавил rails_helper.rb

config.include ActionView::Helpers::DateHelper

и работа, спасибо @jpemberthy!

0 голосов
/ 13 февраля 2015

Недавно у меня была похожая проблема, когда я пытался получить доступ к этой функции из API, поэтому я обернул ее в гем под названием timeywimey. Проверьте это: https://github.com/onetwopunch/timeywimey#usage

Он позволяет получить доступ к этому помощнику из любого места в проекте Rails, а также в Sinatra и собственном проекте ruby.

0 голосов
/ 11 февраля 2010

Что именно вы пытаетесь проверить? Вам не нужно проверять поведение самого time_ago_in_words, потому что это покрыто собственными тестами Rails. Если вы тестируете одного из своих собственных помощников, использующих time_ago_in_words, выходные данные можно проверить с помощью вспомогательного теста (который наследуется от ActionView::TestCase).

Функциональные тесты предназначены для проверки поведения контроллеров (какой шаблон они представляют, разрешают ли они доступ, перенаправление и т. Д.), Что может включать проверку наличия определенных тегов HTML (по идентификатору). Я обычно стараюсь не использовать их для проверки содержимого тегов.

...