как заглушить локальную переменную в тесте контроллера rspec - PullRequest
1 голос
/ 15 ноября 2010

Я только что реализовал OmniAuth (используя Screencast http://asciicasts.com/episodes/235-omniauth-part-1) Райана Бейтса, и пишу тесты Rspec на функциональность, и столкнулся с проблемами при проверке действий аутентификации # create.как это проверить - в частности, как заглушить локальную переменную omniauth. Независимо от того, что я пытаюсь, я не могу заставить работать какие-либо тесты.

Принимая сокращенную версию действия, каквы проверяете, что новый пользователь вызывается, например

<code>
#cut down version of the authentifications controller code I am attempting to test

  def create
    omniauth = request.env["omniauth.auth"]
    authentification = Authentification.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])     
    ....
    user = User.new
    ....
  end  

#example test

    it "should create a new user" do          
        subject.stub_chain(:request,:env) {{"omniauth.auth" => {'provider' =>1, 'uid' => 2}}}
        User.should_receive(:new)
        post :create
      end

1 Ответ

3 голосов
/ 19 ноября 2010

Я сделал это:

class SessionsController < ApplicationController 
  def create 
    @user = User.find_by_auth_hash(auth_hash) 
  end 

  def auth_hash 
    request.env['omniauth.auth'] 
  end 
end 

describe SessionsController do 
  it 'should allow login' do 
    controller.stub!(:auth_hash).and_return({'provider' => 'twitter', 'uid' => '1234'}) 
    get :create, :provider => 'twitter' 
    assigns(:user).should_not be_nil 
  end 
end 

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...