0

使用を開始したばかりTest::Unitですが、リダイレクトテストを特定するのに問題があります。

  test "should destroy line_item" do
    assert_difference('LineItem.count', -1) do
      delete :destroy, id: @line_item
    end

    assert_redirected_to controller: 'carts', action: 'show'
  end

これは次のエラーをスローします:

Failure: Expected response to be a redirect to <http://test.host/carts/980190962> but was a redirect to <http://test.host/carts/980190963>.
test_should_destroy_line_item(LineItemsControllerTest)
test/functional/line_items_controller_test.rb:47:in `block in <class:LineItemsControllerTest>'

ドキュメントには次のように記載されています。

assert_redirected_to(options = {}、message = nil)public

渡されたリダイレクトオプションが、最新のアクションで呼び出されたリダイレクトのオプションと一致することを表明します。この一致は部分的である可能性があり、assert_redirected_to(:controller => "weblog")はredirect_to(:controller => "weblog"、:action => "show")などのリダイレクトにも一致します。

しかしassert_redirected_to controller: 'carts'、さらに完全な失敗につながります。

Failure: Expected response to be a redirect to <http://test.host/carts> but was a redirect to <http://test.host/carts/980190963>.
test_should_destroy_line_item(LineItemsControllerTest)

ドキュメントが正しい場合、何が欠けていますか?そうでない場合、一致するIDに関係なく、リダイレクトをテストするためにどのような代替手段が必要ですか?

4

1 に答える 1

0

のドキュメントassert_redirected_toは完全には正しくないようですが、問題の一部は、cart_idが破棄される@line_item段階と比較してセットアップ段階(作成時)で異なることに関係していました。したがって、回避策は、破棄時に同じcart_idを持つようにフィクスチャ/コントローラを変更することです。それは実際の問題を解決しませんassert_redirected_toが、少なくともテストは合格します。

于 2012-10-24T21:45:34.277 に答える