Проблема тестирования Omniauth Rspec

Я следил за рельсами из omniauth, чтобы создать аутентификацию для twitter (http://railscasts.com/episodes/235-omniauth-part-1?view=comments). Он отлично работает в разработке, но я не могу заставить rspec обнаружить, что я создал аутентификацию. Вот мой фрагмент для функции create в моем контроллере проверки подлинности:

def create
  begin

    auth_hash = request.env["omniauth.auth"]
    @auth = current_user.authentications.build( :provider     => auth_hash['provider'], 
                                              :uid          => auth_hash['uid'],
                                              :name         => auth_hash['user_info']['name'],
                                              :nickname     => auth_hash['user_info']['nickname'],
                                              :image        => auth_hash['user_info']['image'] 
                                              )

    if @auth.provider.downcase == "twitter"
      @auth.auth_token      = auth_hash['credentials']['token']
      @auth.secret_token    = auth_hash['credentials']['secret']
      @auth.site            = auth_hash['user_info']['urls']['Twitter']
    elsif @auth.provider == "Facebook"

    end

  rescue
    redirect_to current_user, :flash => { :error => "Missing oauth data!! Check with administrator!"}
  else
    if @auth.save
      msg = "Authentication success"
    else
      msg = "Already have authentication"
    end
    redirect_to current_user, :notice => msg
  end
end

включенный в мои маршруты:

match '/auth/:provider/callback' => 'authentications#create'

У меня есть следующая настройка в моем rspec_helper:

OmniAuth.config.test_mode = true
OmniAuth.config.add_mock(:twitter, {  :provider    => "twitter", 
                                  :uid         => "1234", 
                                  :user_info   => {   :name       => "Bob hope",
                                                      :nickname   => "bobby",
                                                      :urls       => {:Twitter => "www.twitter.com/bobster"}},
                                  :credentials => {   :auth_token => "lk2j3lkjasldkjflk3ljsdf"} })

Вот мой код rspec, который не работает:

  describe "Post 'create'" do
    before(:each) do
      @user = Factory(:user)
      sign_in @user
    end

    describe "success" do
      before(:each) do
        request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
      end


      it "should create authentication" do
        lambda do
          post :create, :provider => "twitter"
          response.should redirect_to(@user)
        end.should change(Authentication, :count).by(1)
      end
    end
  end

Ошибка, которую я получаю:

1) AuthenticationsController Post 'create' success должен создать аутентификацию    Ошибка/ошибка: lambda do      счет должен был быть изменен на 1, но был изменен на 0    #./spec/controllers/authentications_controller_spec.rb:57

Я проверил все и не могу понять, что я делаю неправильно. Может ли кто-нибудь помочь?

Ответ 1

Я наконец понял, что случилось. в моем макете: auth_token предположительно будет: токен. Это вызвало неудачную проверку.

Ответ 2

Не должен ли быть запрос на получение?

describe "success" do
  before(:each) do
    request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
  end


  it "should create authentication" do
    lambda do
      get :create, :provider => "twitter"
      response.should redirect_to(@user)
    end.should change(Authentication, :count).by(1)
  end
end