这是我的情况 - 我有一个名为LayoutHelper的帮助器,用于帮助我构建布局,我正在尝试测试以下方法。
它在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 :(得分:0)
我不得不说,起初这让我很难过 - 但我终于找到了不太正确的事情。
助手是html生成器,应该构建在一个泡沫中 - 不知道会话,控制器等发生了什么。你的show_login_form?
方法不生成代码,它使用控制器方法。它应该在application_controller.rb本身,并在控制器测试中进行测试。
一旦你搬到这里,你应该没有问题测试。哦,这可能是编写方法本身的一种更简单,更甜蜜的方式:
def show_login_form?
!(@hide_login_form || logged_in?)
end
我希望这会有所帮助。它当然让我研究辅助测试,直到现在我都忽略了它。