2012-04-20 5 views
2

저는 TDD를 처음 사용하기 때문에 분명한 사실 이니 저를 용서해야 할 것입니다.하지만 Devise와 Omniauth를 사용하여 로그인 시스템을 개발하고 있습니다. 하지만 어떤 이유로 rspec 테스트를 실행할 때 실패합니다.dev_sign_in_and_redirect가 rspec 테스트를 실패하게 만듭니다.

나는 경우, 내가 테스트를 실행하면 내가 실제로

Failure/Error: get :create 
    NoMethodError: 
     undefined method `user' for nil:NilClass 
    # ./app/controllers/authentications_controller.rb:13:in `create' 

을 얻을

describe "GET 'create'" do 
    before(:each) do 
     request.env['omniauth.auth'] = { "provider" => "facebook", "uid" => "1298732", "info" => { "first_name" => "My", "last_name" => "Name", "email" => "[email protected]" } } 
    end 

    it "should create a user" do 
     lambda do 
     get :create 
     end.should change(User, :count).by(1) 
    end 
    end 

이 RSpec에 테스트 내 인증 컨트롤러

class AuthenticationsController < ApplicationController 
    def create 
    omniauth = request.env['omniauth.auth'] 
    authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid']) 
    if authentication 
     flash[:notice] = "Signed in successfully" 
     sign_in_and_redirect(:user, authentication.user) 
    else 
     user = User.find_by_email(omniauth['info']['email']) || User.new(:email => omniauth['info']['email'], :fname => omniauth['info']['first_name'], :lname => omniauth['info']['last_name']) 
     user.authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid']) 
     if user.save :validate => false 
     flash[:notice] = "Login successful" 
     sign_in_and_redirect(:user, user) 
     else 
     flash[:notice] = "Login failed" 
     redirect_to root_path 
     end 
    end 
    end 
end 

의 생성 작용을 테스트하고 있습니다 sign_in_and_redirect 문을 제거하면 테스트가 통과됩니다. 흥미롭게도 sign_in_and_redirect 대신 sign_in을 사용하면 실패합니다.

왜 이런 일이 일어날 지 알고 계십니까? 특히 개발할 때 계정을 직접 만들면 잘 작동하므로 ...

미리 도움을 청하십시오! 당신은 유증의 유틸리티 방법 중 하나를 사용하는 경우

+2

확신 문제. 에 분명히, 테스트 내에서 고안의 sign_in 방법을 사용하기 위해 전화를 걸해야합니다 가 고안 :: TestHelpers를 포함한 후 포함, 내 문제는 멀리 가서 모든 기능이 제대로 작동하는 것 같다. –

답변

0

How To: Controllers and Views tests with Rails 3 (and rspec)

컨트롤러의 사양은 상자 밖으로 작동하지 않습니다. RSpec에 레일-2.0.0 및 고안-1.1, 귀하의 사양에 고안 넣어하는 가장 좋은 방법은 현재로

는 spec_helper에 다음을 추가하는 것입니다 : 나는 내 자신을 해결

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 
관련 문제