Нужен толчок в правильном направлении, чтобы написать мой первый функциональный тест в Rails - PullRequest
0 голосов
/ 19 мая 2010

За последние несколько дней я прочитал немного документации о тестировании в Rails, сижу, чтобы написать свой первый настоящий тест, и не уверен на 100%, как связать то, что я изучил, для достижения следующего функциональный тест (тестирование контроллера)

Мне нужно отправить запрос GET на URL и передать 3 параметра (простой веб-сервис), если функционал работает, просто возвращается ключевое слово true, в противном случае возвращается ключевое слово false - его единственное значение возвращено и не содержится ни в каких <div>, <span> или других тегах.

Тест должен утверждать, что если возвращено "true", тест считается успешным.

Это, наверное, очень просто, поэтому извиняюсь за такой не вызывающий сомнений вопрос.

Если бы кто-нибудь мог указать мне направление письма о том, как мне начать, особенно о том, как я могу проверить ответ, я был бы очень благодарен!

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Вы прочитали Руководство по тестированию Rails-приложений ?Это довольно хорошо.

Ваш тест, вероятно, будет выглядеть примерно так:

def test_should_get_index
  get :index, :a => "1", :b => "2", :c => "3"
  assert_response :success
  assert_equal "true", @response.body
end
0 голосов
/ 19 мая 2010

Если это тест вашего собственного приложения, то что-то вроде этого можно сделать как функциональный тест или интеграционный тест в зависимости от ваших предпочтений. Интеграционные тесты являются более "реальным миром" в том смысле, что они используют реальные URL и маршруты, в отличие от функциональных тестов, которые просто выполняют определенные действия контроллера.

Для внешней службы все, что вам действительно нужно, - это использовать Test :: Unit или другой фреймворк, такой как rspec или Cucumber, в качестве оболочки для ваших тестовых определений.

Определите метод, который делает этот запрос GET в некотором классе, а затем напишите проводку, которая его проверяет. Например:

def test_expected_response
  assert_equal 'true', MyHelper.make_call('param_a', 'param_b', 'param_c')
end

Очевидно, что этот тест не пройдёт, если MyHelper и MyHelper.make_call не будут правильно определены, но это не так уж сложно:

class MyHelper
  def make_call(a, b, c)
    # Call service using Net::HTTP, Curb, etc.
    # ...
    # Return answer
  end
end
...