使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试

Posted

技术标签:

【中文标题】使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试【英文标题】:Ruby on Rails functional testing with the RESTful Authentication plugin 【发布时间】:2010-10-26 10:01:26 【问题描述】:

我今天开始为我的 rails 应用程序编写功能测试。我使用 RESTful 身份验证插件。我遇到了一些令人困惑的事情,希望有人能为我澄清。

1) 我写了一个快速登录功能,因为我的 rails 应用程序中的大多数功能都需要身份验证。

def login_as(user)
   @request.session[:user_id] = user ? user.id : nil
end

我看到的这个功能的问题是,它基本上是伪造身份验证。我应该担心这个吗?只要我在某处测试真正的身份验证方法,也许可以走这条路。或者这可能是一种糟糕的做法。

2) 第二个令人困惑的事情是,在我的功能测试的某些地方,我需要进行完整的身份验证过程。当用户被激活时,我让 do_activate 方法为用户创建一些初始对象。这类似于为学生应用程序创建空白笔记本对象和笔对象,如果这有意义的话。

因此,为了正确测试我的应用程序,我需要用户达到激活状态,以便创建这些对象。我目前正在使用 Factory Girl 创建用户,然后调用上面的 login_as 函数来伪造身份验证。

我想另一种选择是跳过完整的身份验证序列,只使用 Factory Girl 创建空白对象。我可以在其他地方测试正确的身份验证。

你怎么看?如果我应该通过正确的顺序,为什么下面的代码不调用 do_activate 函数?

user = Factory.create(:user)
user.active = 1
user.save

谢谢!

【问题讨论】:

Here is a similar question I asked 和一堆我拉到一起的链接。 【参考方案1】:

伪造它是完全可以接受的。

但是,请编写其他测试以确保您想要保护的东西受到保护。所以

test "it should show the profile page" do
  user = Factory(:user)
  login_as(user)
  get :show, :id => user
  assert_response :success
end

test "it should not show the profile page cos I'm not logged in" do
  user = Factory(:user)
  get :show, :id => user
  assert_response :redirect
end

请随时联系我进行跟进!

【讨论】:

以上是关于使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 http 基本身份验证和 restful_authentication 插件注销

RESTful 身份验证还是 Authlogic?

如何使用 Firebase 规则进行身份验证(RESTful)

使用 WebAPI 进行 RESTFul 身份验证

通过 restful api 进行 Azure AD 身份验证

如何对 WCF 4 RESTful 服务进行身份验证?