如何在Rails集成测试中使辅助方法可用?

7
我有一个帮助文件在 app/helpers/sessions_helper.rb 中,其中包含了一个方法 my_preference ,该方法返回当前登录用户的偏好设置。我想在集成测试中使用这个方法。例如,这样我就可以在我的测试中使用 get user_path(my_preference)
在其他帖子中,我读到可以通过在测试文件中包括 require sessions_helper 来实现此功能,但我仍然遇到错误 NameError:undefined local variable or method 'my_preference'。我做错了什么?
require 'test_helper'
require 'sessions_helper'

class PreferencesTest < ActionDispatch::IntegrationTest

  test "my test" do
    ...
    get user_path(my_preference)
  end

end
2个回答

9
您的错误信息如下:

您的错误信息提示:

NameError: undefined local variable or method 'my_preference'

这意味着您无法访问my_preference方法。要使该方法在您的类中可用,您需要在其中include模块。
您需要在PreferencesTest类中包含您的模块:SessionsHelper
include SessionsHelper

然后,实例方法my_preference将可供您在测试中使用。

所以,您希望执行以下操作:

require 'test_helper'
require 'sessions_helper'


class PreferencesTest < ActionDispatch::IntegrationTest

  include SessionsHelper

  test "my test" do
    ...
    get user_path(my_preference)
  end

end

谢谢,那个有效!如果我省略 require 'sessions_helper',它现在似乎也可以工作。这有意义吗?require 'sessions_helper' 是必需的吗? - Marty
是的,如果它在app/helpers目录下,你不需要那个。 告诉我! - K M Rakibul Islam

3

如果有人想在所有测试中使用特定的辅助方法,可以将辅助模块包含在 test_helper.rb 文件中:

class ActiveSupport::TestCase 
 ...
 include SessionsHelper
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接