Как написать тесты для контроллера Rails 5, который использует сессию? - PullRequest
0 голосов
/ 01 мая 2018

Я слежу за книгой Agile для веб-разработки на Rails 5.1 и застрял, интегрируя свои тестовые примеры с упражнением, предложенным в разделе «Время воспроизведения». Мы создаем интернет-магазин, в котором есть cart корзина has_many line_items, пока что все хорошо, одним из упражнений было запретить кому-либо доступ к любой корзине, кроме той, которая была в их сеансе, достаточно легко (я думал) и создала следующая проверка:

def show invalid_cart if @cart.id != session[:cart_id] end private def invalid_cart logger.error "Attempt ot access invalid cart #{params[:id]}" redirect_to store_index_url, notice: 'Invalid cart' end

Хорошо, это работает в браузере, но это сломало мои тесты, например, у меня было:

setup do @cart = carts(:one) end ... test "should show cart" do get cart_url @cart assert_response :success end

Сбой, потому что это не ответ 200, а ответ 300 для перенаправления, которое я сделал, когда сессия [: cart_id] была не такой (внутри метода invalid_cart), я попробовал что-то вроде: test "should show cart" do get cart_url @cart, params: { session: { cart_id: @cart.id } } assert_response :success end

но это, похоже, осуждается (’https://github.com/rails/rails/issues/23386#issuecomment-178013357').

Так что я немного растерялся здесь. как обычно следует проводить проверку действительной корзины? и все еще есть значимые тесты.

спасибо за ваше время

1 Ответ

0 голосов
/ 01 мая 2018

Подведем итог: установите request.session[:cart_id] на этапе сборки вашего тестового примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...