2010-06-20 6 views
1

Application-Stack: Rails3, канкан, Завещание, ShouldaРазрабатывают DoubleRenderError

У меня есть несколько вложенных ресурсов и хочет проверить их с 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". 

Тест собираемся проверить ли не авторизованный пользователь может получить доступ к вложенному ресурсу (он не должен)

TestMethod

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 

ControllerMethod:

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 

Все тесты с проверкой подлинности пользователя работают отлично - может кто-то может дать мне подсказку. Большое спасибо! Бен

ответ

0

хорошо я делаюсь - проблема возникает из-за

authenticate_end_user! 
authorize! :read, @end_user 

блок. Первая строка будет отображать ошибку 401 в случае отсутствия авторизации, но во всяком случае вторая строка будет выполнена. Поэтому ставьте аутентификацию в before_filter и авторизацию в другую или действие вашего контроллера. Ben

 Смежные вопросы

  • Нет связанных вопросов^_^