我在视图中使用'time_ago_in_words'函数,我需要在FunctionalTest中测试输出。
但测试无法看到'time_ago_in_words'辅助函数。
如何使用FunctionalTests中的这些辅助方法?
答案 0 :(得分:41)
在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 :(得分: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) 。我通常会尽量避免使用它们来检查标签的内容。