开发者

Testing Omniauth in Rails

We are starting to develop a new website using Rails 3, RSpec 2, and OmniAuth 2. We wanted to follow TDD using RSpec to write the authentication, but we actually don't know where to start. We don't want to test the gem开发者_运维技巧, as it had already been tested, but we want to test the flow of the application and it has routed correctly according to the outcome of the callback.

The best so far is we categorized the problem in two stages: 1- Before the callback: Faking the services like facebook and twitter to return the calls 2- After the callback: getting the results and creating the user and related service

Please guide us and shed us some light :)


Did you checkout the Wiki?

** Edit **

Perhaps something like (untested):

before do
  OmniAuth.config.mock_auth[:twitter] = {
    'uid' => '123545'
  }
end

it "sets a session variable to the OmniAuth auth hash" do
  controller.session[:auth_hash]['uid'].should == '123545'
end


I have experiencing problem for writhing RSpec for OmniauthCallbacksController, do some research on this and it working for me. I am here adding my codes, if anyone found necessary. The tests are for happy path :)

require 'spec_helper'

describe OmniauthCallbacksController do
  describe "#linkedin" do
    let(:current_user) { Fabricate(:user) }

    before(:each) do
      OmniAuth.config.test_mode = true
      OmniAuth.config.mock_auth[:linkedin] = OmniAuth::AuthHash.new({provider: :linkedin, uid: '12345', credentials: {token: 'linkedin-token', secret: 'linkedin-secret'}})
      request.env["devise.mapping"] = Devise.mappings[:user]

      @controller.stub!(:env).and_return({"omniauth.auth" => OmniAuth.config.mock_auth[:linkedin]})
      User.stub(:from_auth).and_return(current_user)
    end

    describe "#linkedin" do
      context "with a new linkedin user" do
        before { get :linkedin }
        it "should authenticate user" do
          warden.authenticated?(:user).should == true
        end

        it "should set current_user" do
          subject.current_user.should_not be_nil
        end

        it "should redirect to root_path" do
          response.should redirect_to(root_path)
        end
      end
    end

  end
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜