【发布时间】:2016-10-29 02:14:32
【问题描述】:
在我的测试中,我想验证没有正确访问权限的用户应该无法访问某些页面(URL):例如以下 URL 只能由分配了教师角色的用户访问。
http://learning4fun-xx.com/forteacher/
当用户没有分配教师角色时,例如一个学生,但试图访问上面的这个 URL,这个用户将被引导到下面的 URL/页面,页面上显示一个未经授权的消息。
http://learning4fun-xx.com/notauthorized/
如何通过使用页面对象来实现?
我的功能文件:
Scenario: User Role test.
Given I am logged in as a student.
When I am trying to visit teacher page.
Then I am not authorized.
我应该这样做吗?验证什么是正确的测试? (step_definitions)
Given(/^I am logged in as a student\.$/) do
visit(LoginPage).login
end
When(/^I am trying to visit teacher page\.$/) do
visit(TeacherPage)
end
Then(/^I am not authorized\.$/) do
visit(NotAuthorizedPage).should_contain_warning_message 'Not Authorized'
end
上面的步骤通过了,甚至访问(TeacherPage),这让我很困惑。该页面根本不显示,它实际上将用户/学生访问到第二个 URL:
http://learning4fun-xx.com/notauthorized/
如何测试这种情况?请分享您的想法。
【问题讨论】:
-
visit(TeacherPage)不包含期望,仅包含操作。重定向到另一个页面也不一定是错误,因此您的测试似乎没有发现失败。不确定您应该写什么,但请参阅 rspec 的redirect_tomatcher - relishapp.com/rspec/rspec-rails/docs/matchers/… -
与您的问题无关,但没有充分的理由,当用户不应该能够访问内容时,返回 404 页面而不是未授权页面是安全最佳实践。 “未授权”只是告诉攻击者这是在这个位置值得尝试抓取的多汁的东西。
标签: ruby cucumber pageobjects