2

Я новичок в тестировании рельсов, и я использую блок: test. У меня есть действие в мой контроллерКак написать функциональный тестовый чехол в рельсах 3.1 и блок: тест

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 

Этот метод представляет собой метод пост. При выполнении этого теста, он терпит неудачу и показывает мне сообщение

«должен сохранить campagin (0.07s) Ожидаемый ответ быть редирект http://test.host/dashboard но был редирект http://test.host/ /home/nouman/.rvm /gems/[email protected]/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

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

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

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

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

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 

The трюк для подготовки post params - использовать метод to_params.

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

UPDATE: Если вы просто хотите проверить, если params[:app_id] GET пары находятся в URL, вы должны просто проверить это наличие вместо проверки, если он пустой или нет:

if params[:app_id] 

else 

end 
+0

Благодаря Чунг для ответ, извините, я не знал о вашем ответе, поэтому принял его через несколько месяцев. – user1014473