Для функционального тестирования вам не нужно заботиться о тестировании модели, то есть в вашем случае вы должны удалить:
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