Можно ли использовать WebMock с Rack Test?

Использование WebMock для заглушки поставщика Oauth 2. Проблема в том, что я хочу использовать Rack Test.

Rack Test работает только с экземпляром приложения и не знает о внешних хостах HTTP, таких как поставщик Oauth 2.

WebMock.stub_request(:get, "https://test.oauth-provider.com/oauth/authorize") не будет работать, так как запрос отправляется приложению как /oauth/authorize.

Есть ли способ для WebMock отвечать на локальные запросы? Например:

WebMock.stub_request(:get, "/oauth/authorize")

person B Seven    schedule 20.08.2015    source источник


Ответы (1)


Мне кажется, вы немного запутались в том, что вы тестируете, и должны провести четкую границу, где ваша система (т.н. SuT, тестируемая система) и где внешние стороны.

Это очень важно, так как:

  • SuT — это то, с чем вы собираетесь взаимодействовать во время тестов (т. е. с вашим приложением Rack);
  • следует издеваться над внешними сторонами (т. е. внешними веб-сервисами и... что может быть удивительно, другими библиотеками, такими как OAuth, драйверы SQL и т. д.)

Это означает, что если вы пытаетесь использовать WebMock для какой-либо части вашего приложения (что похоже на то, что вы делаете из-за вопроса о имитации относительного URL), вы явно делаете Что-то не так.

Ближе к вашей задаче, на вашем месте я бы:

  1. Выберите хорошую, хорошо протестированную библиотеку OAuth и добавьте ее в приложение.
  2. Когда дело доходит до тестирования, просто используйте мои собственные простые объекты-заглушки вместо реальных классов реализации OAuth. Это сместит акцент на тестирование поведения, которое реализует мой сервис. Проверка библиотеки OAuth — это действительно двойная работа, поскольку она уже покрыта ее авторами.

Надеюсь это поможет!

person SkyWriter    schedule 21.08.2015