Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you test omni-auth facebook using rspec?

I've looked at the gem wiki and followed the instructions but for some reason I am getting a nil when doing an omniauth test:

user_sessions_controller_spec.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      => "[email protected]"},
     :credentials => {:token => "testtoken234tsdf"}}

OmniAuth.config.add_mock(:facebook, omniauth_hash)

spec result:

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)>'
like image 657
Goalie Avatar asked Oct 08 '22 22:10

Goalie


1 Answers

Try a symbol in your test rather than a string:

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

I'm not sure if Omniauth changed from strings to symbols at some point but there seems to be a number of examples out there using strings as keys.

Just for completeness, if anyone is trying to do this with Devise and Omniauth, don't forget to add the devise.mapping in the before block.

before do
  request.env["devise.mapping"] = Devise.mappings[:user]
  request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
end
like image 168
John Plummer Avatar answered Oct 12 '22 09:10

John Plummer