我试图测试一个简单的索引视图,其中包含以下代码:
- if can? :destroy, MyModel
%th Options
MyModelsController
有以下选项(继承资源+ CanCan + Devise):
class MyModelsController < ApplicationController
inherit_resources
nested_belongs_to :mymodel
before_filter :authenticate_user!
load_and_authorize_resource :project
load_and_authorize_resource :mymodel, :through => :project
运行测试时,它在这行代码 - if can? :destroy, MyModel
处崩溃。
Failure/Error: render
ActionView::Template::Error:
undefined method `authenticate' for nil:NilClass
没有追踪记录,没有依据可以参考...
我以为可能是在测试视图时没有得到授权和签名,但 Devise::TestHelpers
应该仅包含在控制器测试中(我是这样做的)。
我试图同时覆盖 Ability
和控制器中的 can? 方法,但没有效果。
controller
上以及view.current_ability
上进行存根,但这很完美。 - Gareth