Ruby on rails 为rails 3中的集成测试方法提供帮助

Ruby on rails 为rails 3中的集成测试方法提供帮助,ruby-on-rails,ruby,testing,integration-testing,Ruby On Rails,Ruby,Testing,Integration Testing,我正在为我的rails 3.2.16应用程序准备一些集成测试,我想,在我的用户场景中,我有几个调用,我会在很多测试中重复,所以我想把它们放在一个单独的通用模块中,让它们干燥 例如,我创建了/test/integration/my_test\u helpers.rb: require 'test_helper' module MyTestHelper def login_user(email, password, stay = 0) login_data = { ema

我正在为我的rails 3.2.16应用程序准备一些集成测试,我想,在我的用户场景中,我有几个调用,我会在很多测试中重复,所以我想把它们放在一个单独的通用模块中,让它们干燥

例如,我创建了
/test/integration/my_test\u helpers.rb

require 'test_helper'

module MyTestHelper

  def login_user(email, password, stay = 0)
    login_data = {
      email: email,
      password: password,
      remember_me: stay
    }
    post "/users/sign_in", user: login_data
    assert_redirected_to :user_root
  end
end
并尝试在我的集成测试中使用它:

require 'test_helper'
require "./my_test_helpers.rb"

class CreateCommentTest < ActionDispatch::IntegrationTest

  setup do
    @user = users(:user1)
  end

  test "create comment" do
    login_user @user.email, "password", 1
  end
end

如何加载模块?将
MyTestHelpers
设置为模块是否正确?

您应该将助手放入支持文件夹(
test/support/my\u test\u helpers.rb
或其他内容),并在
test\u helper.rb
中加载模块:

ENV["RAILS_ENV"] ||= "test"
require File.expand_path("../../config/environment", __FILE__)
require "rails/test_help"

require_relative "./support/my_test_helpers"

require "minitest/rails"

class ActiveSupport::TestCase
  ActiveRecord::Migration.check_pending!

  fixtures :all

  # Add more helper methods to be used by all tests here...
end
不要记住
包括
您的模块:

require 'test_helper'

class CreateCommentTest < ActionDispatch::IntegrationTest
  include MyTestHelper

  setup do
    @user = users(:user1)
  end

  test "create comment" do
    login_user @user.email, "password", 1
  end
end
需要“测试助手”
类CreateCommentTest
谢谢,现在好多了,不过我还有一个
未定义的方法
login\u user's`
require 'test_helper'

class CreateCommentTest < ActionDispatch::IntegrationTest
  include MyTestHelper

  setup do
    @user = users(:user1)
  end

  test "create comment" do
    login_user @user.email, "password", 1
  end
end