测试 RSpec 限制用户行为 一小段测试控制器代码 讨论

juanito · 2012年06月05日 · 最后由 Juanito 回复于 2012年06月05日 · 2646 次阅读
{ "new" => "get",
  "create" => "post",
  "edit" => "get",
  "update" => "put",
  "destroy" => "delete" }.each do |action, method|
  it "不能存取 #{action} 动作" do
    sign_in(:user, user)
    send(method, action.dup, :id => project.id)
    response.should redirect_to(root_path)
    flash[:alert].should eql("亲,你必须是管理员才能这么做哦!")
  end
end

"new"=>"get" ... 这里不用符号用字串的原因,貌似是动作变量是 Ruby 1.9.2 的 Frozen 字串,所以需要复制这个对象,这样 Rails 才会强迫它的编码为 UTF-8。

不知道对不对,楼下请指导。

我觉得这个不用测,你这个实际上有点测试 before_filter 的味道了。 假如你的代码是这样。

before_filter :admin_required

你要测试的是 admin_required 而不是测试 before_filter 是否对每个 action 都起作用了

#1 楼 @poshboytl 哈哈,对哦,我的 before_filter 刚好是相反的:

before_filter :authorize_admin!, :except => [:index, :show]

所以就测了下另外五个动作不是管理员时,是否会有正常的行为。

def authorize_admin! authenticate_user! unless current_user.admin? flash[:alert] = "亲,你必须是管理员才能这么做哦!" redirect_to root_path end end

感谢回复:)

#2 楼 @Juanito 哈哈~原来如此... 不过呢,我个人觉得...你既然写了 expect,那么其它的就一定应该起作用。 当然,前提是你信任 Rails :)

如果你信任 rails,你要做的只是确保 :authorize_admin! 本身的行为是正确的就行了。

但是你的做法也没有不对啦,你可以验证你的 expect 里的内容没有写错。

Great..

#3 楼 @poshboytl OK. 好的,我会继续与 Rails 培养基情的。。。Juanito 觉得楼上的回复真赞 (Y)(Y)(Y)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号