assert_redirected_to использование?

Только начинаю использовать 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)

Если документация верна, что мне не хватает? Если это не так, какие у меня есть альтернативы для проверки перенаправления независимо от соответствующего идентификатора?


person prusswan    schedule 23.10.2012    source источник


Ответы (1)


Похоже, что документация для assert_redirected_to не совсем верна, но часть проблемы была связана с тем, что cart_id отличался на этапе установки (когда создается @line_item) по сравнению с этапом, на котором он был уничтожен. Таким образом, обходной путь состоит в том, чтобы изменить приспособление/контроллер таким образом, чтобы он имел тот же самый cart_id во время уничтожения. Это не решает реальной проблемы с assert_redirected_to, но, по крайней мере, тест будет пройден.

person prusswan    schedule 24.10.2012