Тестирование Grape с помощью Minitest — от какого класса наследоваться?

Мое приложение rails использует minitest. Мне неясно, какой класс я должен унаследовать для своего теста. Я думал об ActionController::TestCase, но это не кажется правильным, потому что он не привязан к контроллеру рельсов. Какие-либо предложения?

Изменить: нельзя использовать MiniTest::Unit::TestCase, потому что он не включает ничего для проверки отдельных конечных точек API.


person sunnyrjuneja    schedule 04.01.2015    source источник
comment
Я потратил 30 секунд на гугл-минитест, и похоже, что ответ должен быть MiniTest::Unit::TestCase?   -  person Adrian    schedule 05.01.2015
comment
Извините, если я прозвучал для вас снисходительно, я не хотел этого. Что вы подразумеваете под конечными точками API?   -  person Adrian    schedule 05.01.2015
comment
Grape — это библиотека для Ruby для создания HTTP API. Вы можете интегрировать его в рельсы в определенной степени. Когда вы пишете тесты, вам нужно будет использовать GET, POST на конечных точках HTTP. ActionController::TestCase дает вам метод get для вызова контроллера и действия, но в данном случае это не сработает. Я ищу, от чего наследовать, чтобы получить метод get/post и любые другие помощники HTTP.   -  person sunnyrjuneja    schedule 05.01.2015
comment
Может тогда попробовать наследоваться от Minitest::Unit::TestCase и include от ActiveSupport::TestCase::Behavior::ClassMethods?   -  person Adrian    schedule 05.01.2015
comment
Это очень хорошая идея. Я попробую.   -  person sunnyrjuneja    schedule 05.01.2015
comment
Спасибо за идею. В итоге я использовал Rack::Test::Methods, так как ActiveSupport не включает методы HTTP.   -  person sunnyrjuneja    schedule 05.01.2015


Ответы (2)


Вместо того, чтобы наследовать от определенного класса минитеста, я просто включил тестовые помощники из Rack.

class V0::YourAPI < ActiveSupport::TestCase
  include Rack::Test::Methods

  def app
    Rails.application
  end
end
person sunnyrjuneja    schedule 04.01.2015

Я использую класс ActionDispatch::IntegrationTest

Например:

class ApiRequestTest < ActionDispatch::IntegrationTest
 test "sample response" do
  get "/api/v1/sample_request"
  assert_equal response.success?, true
  assert_equal response.code, 200
 end
end
person Mike Walkowiak    schedule 16.02.2017