2011-01-17 4 views
2

私はRails環境でのテストの初心者です。私はすでに書かれたコードのテストを書くことを試みています。私は以下のような簡単なログインテストを書こうとしています。Railsテスト - ログインをシミュレートする方法

test "login with invalid credentials" do 
    post :login, :coach => {:user_name => 'foo', :password =>'bar'} 
    assert_equals flash[:error] , "Authentication failed" 
    end 

このテストを実行しようとすると、認証に失敗したというメッセージが表示されます。しかし、代わりにエラーが発生しています。

1) Error: 
test_login_with_invalid_credentials(CPControllerTest): 
RS::LDAPAuthentication::ConnectionError: Net::LDAP::LdapError: Server 127.0.0.1 refused connection on port 1389. 

これは、アプリケーションのコントローラ

def login 
    self.page_title = 'Sign in' 

    if logged_in? # already signed in 
     session[:return_to] = nil 
     redirect_to_appropriate_url 
    elsif params[:coach] 
     user_name, password = params[:coach][:user_name], params[:coach][:password] 
     if self.current_user = User.authenticate(user_name, password) #PLACE WHERE EXCEPTION IS RAISED 
     self.notice = "Signed in successfully" 
     redirect_to_appropriate_url 
     else 
     flash[:error] = "Authentication failed" 
     end 
    end 
    render :template => '/coach_portal/login' unless performed? 
    end 

単純な理由のログイン方法は、外部のLDAPサーバーと通信しようとしているされており、私のテストは、それに接続できないでloginメソッドです。このシナリオではどうすればよいですか。コードを変更する必要がありますか、またはLDAP接続をシミュレートする必要があります。たとえ私が1つをシミュレートしたとしても、どうすればいいでしょうか?

ポインタ/ヘルプ/リンクは大変感謝しています。

+0

あなたは認証gem /フレームワークを使用していますか? – cbrulak

+0

はい..私は1つを使用しています.. – bragboy

+0

どちらか?あなたのLDAPサーバはテスト中に動作していますか? – cbrulak

答えて

6

アプリケーションの動作を分離するには、User#authenticateメソッドをスタブすることをおすすめします。そうすれば、LDAPが成功したとき、失敗したとき、または例外が発生したときのアプリケーションの動作をテストするだけです。

test "login with invalid credentials" do 
    User.stubs(:authenticate).returns false 
    post :login, :coach => {:user_name => 'foo', :password =>'bar'} 
    assert_equals flash[:error] , "Authentication failed" 
end 
関連する問題