如何为使用会话的Rails 5控制器编写测试?

时间:2018-05-01 18:25:40

标签: ruby-on-rails unit-testing

我正在阅读使用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')。

所以我在这里有点失落。如何正常实施有效购物车的验证?并且仍然有有意义的测试。

感谢你的时间

1 个答案:

答案 0 :(得分:0)

回顾一下:在测试用例的汇编阶段设置request.session[:cart_id]