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)>'
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With