如何使用 Omniauth gem 登录用户进行我的 Rails 测试?

How can I login a user for my Rails tests using Omniauth gem?

我已经用 omniauth-facebook gem 申请了。我的所有 rails 测试都通过了,但是在添加代码以检查经过身份验证的用户是否可以访问某些操作之后 - 我的一些测试失败了。我如何才能将代码添加到我的测试中以登录 "test" 用户,以便我可以模拟经过身份验证的用户?大多数 google 结果显示 Rspec 或 Devise 示例的示例,但我一直在使用 Rails 5 的默认测试套件,所以我很难找到一些示例如何正确地做到这一点。如果您希望我提供我当前测试的任何特定样本,请告诉我。没有想到要包含的相关内容,因为我不确定从哪里开始。

所以在通读了文档 here 并尝试了各种方法后,我想到了...

test/test_helper.rb

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

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  OmniAuth.config.test_mode = true
  OmniAuth.config.add_mock(:facebook, {:uid => '123456', info: { email: 'email_address_of_user_in_fixtures@gmail.com' }})

  def sign_in_admin
    Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
    get auth_facebook_callback_path
  end

end

test/controllers/restaurants_controller_test.rb

require 'test_helper'

class RestaurantsControllerTest < ActionDispatch::IntegrationTest
  setup do
    # I sign in an admin user, and proceed
    sign_in_admin
    @restaurant = restaurants(:mcdonalds)
  end

  # other test methods for actions ...
end

config/routes.rb

  Rails.application.routes.draw do
    #...
    get 'auth/facebook/callback', to: 'sessions#create'
    #...
  end