Как написать функциональный тестовый пример в рельсах 3.1 и модуле: тест - PullRequest
2 голосов
/ 30 марта 2012

Я новичок в тестировании рельсов и использую юнит: тест.У меня есть действие в моем контроллере

   def save_campaign
      unless params[:app_id].blank?
        @app = TestApp.find(params[:app_id])
          if params[:test_app]
            @app.update_attributes(params[:test_app])
           end
        flash[:notice] = "Your Registration Process is completed"
       redirect_to "/dashboard"
      else
    redirect_to root_path
     end
    end

, и мой тестовый пример выглядит следующим образом

test "should save campagin " do
 assert_difference('TestApp.count', 0) do
           post :save_campaign,    test_app: @test_app.attributes
        end
       assert_redirected_to "/dashboard"
      end
   end

Этот метод является методом записи.Во время выполнения этого теста он не проходит и показывает мне сообщение

"должно сохранить кампагин (0,07 с). Ожидаемый ответ - перенаправление на http://test.host/dashboard, но перенаправление на http://test.host/ /home/nouman/.rvm/gems/ruby-1.9.2-p290@global/gems/actionpack-3.1.3/lib/action_dispatch/testing/assertions/response.rb:67:in `assert_redirected_to '

Я предполагаю, что я не даю правильное утверждение для проверки параметров

params [: app_id] и @app = TestApp.find (params [: app_id]).

Как я могу написать такое утверждение, чтобы проверить эти атрибуты, проверьте, если параметр не указан. Как я могу найти объект с заданным идентификатором.

1 Ответ

1 голос
/ 19 апреля 2012

Для функционального тестирования вам не нужно заботиться о тестировании модели, то есть в вашем случае вы должны удалить:

assert_difference('TestApp.count', 0) do
..
end

Что вы хотите знать в функциональном тесте, так это то, что если страницазагружен, правильно перенаправлен.

В вашем контроллере есть проверка состояния для параметров, поэтому для каждого из результатов проверки вы пишете каждый тест, то есть вы должны написать два функциональных теста:

test "if app_id param is empty, #save_campaign redirect to root" do
  post :save_campaign, :app_id => nil
  assert_redirected_to root_path
end

test "#save_campaign" do
  post :save_campaign, :app_id => app_fixture_id, :test_app => @test_app.attributes.to_params
  assert_redirected_to '/dashboard'
end

Хитрость при подготовке пост-параметров заключается в использовании метода to_params method.

Надеюсь, что это поможет.

ОБНОВЛЕНИЕ: Если выпросто хотите проверить, есть ли в URL params[:app_id] GET параметр, вам нужно просто проверить это наличие, а не проверять, является ли оно пустым:

if params[:app_id]

else

end
...