【问题标题】:How to test a second redirect in Rails' controller test如何在 Rails 的控制器测试中测试第二个重定向
【发布时间】:2014-03-21 10:20:59
【问题描述】:

我正在使用Wicked,它在完成向导后重定向到自定义链接。这发生在第二次重定向中。

因此,PUT update 触发 302 到 /orders/1/finish_wicked,然后重定向到 /orders/1。这可以按预期工作,但很难在我的控制器测试中进行测试。

it "must redirect to the order" do
  put :update
  assert_redirected_to "/orders/1/finish_wicked" #=> This passes, but I am not interested in this
  assert_redirected_to order #=> This fails, yet, in the end, the user is being redirected here.
end

如何在我的功能控制器测试中测试第二个重定向?

现在,我把它分成两个测试:

  describe "finalize" do
    it "should redirect to the wicked_finish page" do
      put :update, id: :finalize, order_id: order.id, order: { accepted: true }
      assert_redirected_to controller: "build", action: :update, id: :wicked_finish, order_id: order.id
    end

    describe "wicked_finish" do
      it "should redirect to the order page" do
        get :show, id: :wicked_finish, order_id: order.id
        assert_redirected_to order
      end
    end
  end

一个测试它是否被重定向到 wicked-provided 完成路径,另一个定义如果用户登陆那里,她将被重定向到订单。 这太冗长了;在控制器测试中不可能遵循重定向吗?或者这是一个坏主意,是否应该像我一样将测试分开?

【问题讨论】:

    标签: ruby-on-rails minitest


    【解决方案1】:

    Uhmmmmm 不确定这是否是一个正确的答案,但我看到一些糟糕的代码会做这样的事情。拨打电话,当您将其重定向到页面时,响应包含重定向到 bla bla bla。在我的情况下,重定向页面取决于传递的参数,因此我事先知道链接,并且我断言那里存在 url/链接。

    【讨论】:

      【解决方案2】:

      可以按照第一次重定向,使用follow_redirect!:

      test 'assert second redirect' do
        put :update
        assert_redirected_to "/orders/1/finish_wicked"
        follow_redirect!
        assert_redirected_to order 
      end
      

      Apidock follow_redirect!

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        相关资源
        最近更新 更多