2010-01-18 43 views
1

这里是我的情况 - 我有一个名为LayoutHelper的帮助器,用于帮助我构建布局,并试图测试以下方法。如何测试Rails:生活在application.rb中的helper_methods?

它已LayoutHelper的方法,看起来与此类似:

def show_login_form? 
    return false if @hide_login_form || logged_in? 
    return true 
end 

我也有我的application.rb中如下:

helper_method :logged_in? 

def logged_in? 
    return @logged_in_user.present? 
end 

最后,我的测试文件看起来像这样:

require File.dirname(__FILE__) + '/../../test_helper'       

class LayoutHelperTest < ActionView::TestCase         

    def test_hide_login_form              
    assert(show_login_form?)             
    hide_login_form                
    assert(!show_login_form?)             
    end                   

end 

我现在的问题是,当我运行这个测试,我得到这个:

NoMethodError: undefined method `logged_in?' for #<LayoutHelperTest:0xb7a7aca8> 
app/helpers/layout_helper.rb:17:in `show_login_form?' 
layout_helper_test.rb:12:in `test_hide_login_form' 

我想知道如果我是这样做正确的Rails方式,如果是这样,我需要更改才能使此测试工作。

回答

0

我不得不说,这首先让我难住 - 但我终于明白了什么是不正确的。

帮助程序是html生成器,应该在泡沫中生成 - 不知道会话,控制器等等发生了什么。您的show_login_form?方法不生成代码,它使用控制器方法。它应该在application_controller.rb本身中,并在控制器测试中进行测试。

一旦你在这里移动它,你应该没有问题的测试。哦,这可能是一个更短,更甜的方法来写方法本身:

def show_login_form? 
    !(@hide_login_form || logged_in?) 
end 

我希望这可以帮助。它肯定让我去研究帮助者测试,这是我迄今忽视的。