在Rails中测试Omniauth



我们开始使用Rails 3、RSpec 2和OmniAuth 2开发一个新的网站。我们希望遵循TDD,使用RSpec编写身份验证,但实际上我们不知道从哪里开始。我们不想测试gem,因为它已经被测试过了,但是我们想测试应用程序的流程,并且它已经根据回调的结果正确路由了。

到目前为止,最好的是我们将问题分为两个阶段:1-回调前:假装使用facebook和twitter等服务来回电话2-回调后:获取结果并创建用户和相关服务

请引导我们,给我们一些光明:)

您签出Wiki了吗?

**编辑

可能是(未经测试):

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

我遇到了为OmniauthCallbacksController编写RSpec的问题,对此做一些研究,它为我工作。我在这里添加我的代码,如果有人发现必要的。这些测试是针对快乐路径的:)

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

相关内容

  • 没有找到相关文章

最新更新