我正在阅读使用Rails 5.1的敏捷Web开发一书,并且我将测试用例与“播放时间”部分中提出的练习结合起来。我们正在建立一个有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它是我在会话[:cart_id]不相同时(在invalid_cart方法内)所做的重定向的响应300,我尝试了类似的东西:
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')。
所以我在这里有点失落。如何正常实施有效购物车的验证?并且仍然有有意义的测试。
感谢你的时间
答案 0 :(得分:0)
回顾一下:在测试用例的汇编阶段设置request.session[:cart_id]
。