How do you test omni-auth facebook using rspec?
omniauth, rspec, ruby-on-rails
Solution
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
Problem
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 => "johndoe@email.com"}, :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)>' ```