代码之家  ›  专栏  ›  技术社区  ›  Coomer

如何测试Rails:application.rb中的helper_方法?

  •  1
  • Coomer  · 技术社区  · 16 年前

    这是我的情况-我有一个名为layout helper的助手,用来帮助我构建布局,我正在尝试测试以下方法。

    它在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方法来做,如果是,我需要改变什么才能让这个测试工作。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Jaime Bellmyer    16 年前

    我不得不说,这件事一开始让我难堪,但我终于弄明白了什么不太对。

    helper是html生成器,应该构建在bubble中—不知道会话、控制器等中发生了什么 show_login_form? 方法不是生成代码,而是使用控制器方法。它应该在application_controller.rb中,并在控制器测试中进行测试。

    一旦你把它移到这里,你应该没有问题的测试。哦,这可能是一种更简短、更甜美的方法来编写方法本身:

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

    我希望这能有帮助。它当然让我去研究助手测试,直到现在我都忽略了这一点。