Ruby on rails 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 当我尝试运行
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服务器是否存在,我的测试都应该通过,对吗?