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

时间:2017-07-04 15:18:46

标签: ruby-on-rails authentication ruby-on-rails-5 minitest omniauth-facebook

我使用omniauth-facebook gem制作了一个应用程序。我的所有rails测试都在通过,但是在添加代码以检查经过身份验证的用户是否可以访问某些操作之后 - 我的一些测试失败了。如何在我的测试中添加代码以登录“测试”用户,以便我可以模拟经过身份验证的用户?大多数谷歌搜索结果显示了Rspec或Devise示例的示例,但我一直在使用Rails 5的默认测试套件,因此我很难找到一些如何正确执行此操作的示例。如果您希望我提供我当前测试的任何具体样本,请告诉我。因为我不知道从哪里开始,所以没有任何相关内容可供考虑。

1 个答案:

答案 0 :(得分:0)

所以在阅读了文档here后,尝试了各种各样的事情,这就是我想出来的......

<强>测试/ 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

<强>测试/控制器/ 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

<强>配置/ routes.rb中

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