Ruby on rails 如何使用rspec测试omni auth facebook?

Ruby on rails 如何使用rspec测试omni auth facebook?,ruby-on-rails,rspec,omniauth,Ruby On Rails,Rspec,Omniauth,我查看了gemwiki并按照说明操作,但由于某种原因,在进行omniauth测试时,我得到了nil: 用户会话控制器规格rb: require 'spec_helper' describe UserSessionsController, "OmniAuth" do before do request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook] end it "sets a session vari

我查看了gemwiki并按照说明操作,但由于某种原因,在进行omniauth测试时,我得到了
nil

用户会话控制器规格rb:

require 'spec_helper'

describe UserSessionsController, "OmniAuth" do
  before do
    request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
  end

  it "sets a session variable to the OmniAuth auth hash" do
    request.env["omniauth.auth"]['uid'].should == '123545'
  end
end
spec_helper.rb:

RACK_ENV = ENV['ENVIRONMENT'] ||= 'test'
OmniAuth.config.test_mode = true
omniauth_hash =
    {:provider => "facebook",
     :uid      => "1234",
     :info   => {:name       => "John Doe",
                 :email      => "johndoe@email.com"},
     :credentials => {:token => "testtoken234tsdf"}}

OmniAuth.config.add_mock(:facebook, omniauth_hash)
规格结果:

Failures:

  1) UserSessionsController OmniAuth sets a session variable to the OmniAuth auth hash
     Failure/Error: request.env["omniauth.auth"]['uid'].should == '123545'
     NoMethodError:
       You have a nil object when you didn't expect it!
       You might have expected an instance of Array.
       The error occurred while evaluating nil.[]
     # ./spec/controllers/user_sessions_controller_spec.rb:10:in `block (2 levels) in <top (required)>'
故障:
1) UserSessionController OmniAuth将会话变量设置为OmniAuth auth哈希
失败/错误:request.env[“omniauth.auth”]['uid']。应=='123545'
命名错误:
你有一个零的对象,当你没有想到它!
您可能期望数组的一个实例。
计算nil时出错。[]
#./spec/controllers/user\u sessions\u controllers\u spec.rb:10:in‘block(2层)in’

在测试中尝试符号而不是字符串:

  it "sets a session variable to the OmniAuth auth hash" do
    request.env["omniauth.auth"][:uid].should == '1234'
  end
我不确定Omniauth是否在某个时候从字符串变为符号,但似乎有很多使用字符串作为键的示例

为了完整起见,如果有人试图使用Desive和Omniauth执行此操作,请不要忘记在before块中添加designe.mapping

before do
  request.env["devise.mapping"] = Devise.mappings[:user]
  request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
end