使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试
-
22-08-2019 - |
题
我今天开始为我的 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
谢谢你!
解决方案
伪造它是完全可以接受的。
但是,请编写其他测试来确保您想要保护的内容受到保护。所以
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
请随时联系我以获取后续信息!
不隶属于 StackOverflow