アプリケーションスタック: Rails3、CanCan、Devise、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
認証されたユーザーを使用したすべてのテストは正常に機能します-誰かが私にヒントを与えることができます. どうもありがとう!ベン