Ruby on rails Rails测试-如何模拟登录

Ruby on rails Rails测试-如何模拟登录,ruby-on-rails,testing,authentication,login,Ruby On Rails,Testing,Authentication,Login,我是在Rails环境中编写测试的新手。我正在尝试为已经编写的代码编写测试。我正在尝试编写一个简单的登录测试,如下所示 test "login with invalid credentials" do post :login, :coach => {:user_name => 'foo', :password =>'bar'} assert_equals flash[:error] , "Authentication failed" end 当我尝试运行

我是在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服务器通信,而我的测试无法连接到它。在这种情况下我应该怎么做。我应该更改代码还是应该模拟LDAP连接。即使我有一个模拟的,我怎么做呢


非常感谢您的指点/帮助/链接

为了隔离应用程序的行为,我建议删除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

您使用的是认证gem/框架吗?哪一个?您的LDAP服务器在测试期间运行吗?LDAP服务器是一个自定义模块,在外部系统上运行。我的测试应该独立于LDAP服务器。无论LDAP服务器是否存在,我的测试都应该通过,对吗?