Тестирование Omniauth в Rails - PullRequest
4 голосов
/ 03 мая 2011

Мы начинаем разрабатывать новый веб-сайт, используя Rails 3, RSpec 2 и OmniAuth 2. Мы хотели следовать TDD, используя RSpec для написания аутентификации, но на самом деле мы не знаем, с чего начать.Мы не хотим тестировать гем, поскольку он уже был протестирован, но мы хотим протестировать поток приложения, и он правильно маршрутизировался в соответствии с результатом обратного вызова.

Лучшее на данный моментЯвляемся ли мы классифицировать проблему в два этапа: 1- Перед обратным вызовом: Подделка сервисов, таких как Facebook и Twitter для возврата вызовов. 2- После обратного вызова: получение результатов и создание пользовательского и связанного с ним сервиса

Пожалуйста, руководствонас и пролить нам немного света:)

Ответы [ 2 ]

10 голосов
/ 03 мая 2011

Вы заказали 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
1 голос
/ 04 сентября 2015

У меня возникла проблема с записью RSpec для OmniauthCallbacksController, проведите некоторое исследование по этому вопросу, и это работает для меня.Я добавляю свои коды, если кто-то сочтет это необходимым.Тесты для счастливого пути:)

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
...