Я слежу за книгой 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').
Так что я немного растерялся здесь. как обычно следует проводить проверку действительной корзины? и все еще есть значимые тесты.
спасибо за ваше время