Ruby on rails 3 设计双渲染器

Ruby on rails 3 设计双渲染器,ruby-on-rails-3,shoulda,devise,cancan,Ruby On Rails 3,Shoulda,Devise,Cancan,应用程序堆栈:Rails3、CanCan、Deviate、Shoulda 我有一些嵌套资源,想用Shoulda测试它们,我得到了以下DoubleRenderError: Error: test: If anonymous user tries to GET index of fav_blogs should respond with 401. (BlogItemsControllerTest): AbstractController::DoubleRenderError: Render a

应用程序堆栈:Rails3、CanCan、Deviate、Shoulda

我有一些嵌套资源,想用Shoulda测试它们,我得到了以下DoubleRenderError:

Error:
test: If anonymous user tries to GET index of fav_blogs should respond with 401.    (BlogItemsControllerTest):
AbstractController::DoubleRenderError: Render and/or redirect were called multiple times  in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
测试将检查未经身份验证的用户是否能够访问嵌套资源(他不应该)

测试方法

context "If anonymous user tries to GET index of fav_blogs" do
  setup do
    get :index, :end_user_id => end_users(:end_user_one).id, :format => "xml"
  end
  should_respond_with 401
  should_not_assign_to :blog_items
end
控制器方法:

def index

  if params[:end_user_id] # if it is nested
    authenticate_end_user!
    authorize! :read, @end_user

    @blog_items = @end_user.blog_items
  else
    @PAGE_SIZE = 10
    page = Integer(params[:page]) || 0

    offset = @PAGE_SIZE * page
    @blog_items = BlogItem.limit( offset + @PAGE_SIZE ).offset( offset ).order('updated_at DESC').all
  end

  respond_with(@blog_items)
end

所有与经过身份验证的用户进行的测试都可以正常工作-请有人给我一个提示。谢谢!Ben

好了,我做完了-问题是因为

authenticate_end_user!
authorize! :read, @end_user
街区。在没有授权的情况下,第一行将呈现401故障,但无论如何,第二行将被执行。因此,将身份验证放在before_过滤器中,并将授权放在另一个过滤器或控制器操作中。 本