如何在Rails集成测试中提供辅助方法?

Mar*_*rty 5 ruby testing ruby-on-rails ruby-on-rails-4

我有一个帮助文件,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
Run Code Online (Sandbox Code Playgroud)

K M*_*lam 7

你的错误信息说:

NameError: undefined local variable or method 'my_preference'
Run Code Online (Sandbox Code Playgroud)

这意味着您无权访问my_preference方法.要在课堂上使用它,您必须使用班级中include的模块.

你必须SessionsHelper在你的PreferencesTest班级中包括你的模块.

include SessionsHelper
Run Code Online (Sandbox Code Playgroud)

然后,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
Run Code Online (Sandbox Code Playgroud)