如何从FunctionalTest中调用'time_ago_in_words'?

时间:2010-02-11 16:09:25

标签: ruby-on-rails actionview actionviewhelper

我在视图中使用'time_ago_in_words'函数,我需要在FunctionalTest中测试输出。

但测试无法看到'time_ago_in_words'辅助函数。

如何使用FunctionalTests中的这些辅助方法?

4 个答案:

答案 0 :(得分:41)

ActionView::Helpers::DateHelpertest_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 :(得分:1)

我在rails_helper.rb

上添加了
config.include ActionView::Helpers::DateHelper

和工作,谢谢@jpemberthy!

答案 2 :(得分:0)

最近我遇到了类似的问题,我试图从API访问此函数,因此我将其包装在名为timeywimey的gem中。看看:https://github.com/onetwopunch/timeywimey#usage

它允许您从Rails项目中的任何位置以及Sinatra和本机ruby项目访问此帮助程序。

答案 3 :(得分:-1)

你到底想要测试什么?您不应该验证time_ago_in_words本身的行为,因为Rails自己的测试涵盖了这一点。如果您正在测试一个使用time_ago_in_words的助手,则可以在辅助测试中检查输出(继承自ActionView::TestCase)。

功能测试旨在验证控制器的行为(它们呈现的模板,是否允许访问,重定向等),其中包括检查 某些HTML标记的存在(通过id) 。我通常会尽量避免使用它们来检查标签的内容。