Как отключить промежуточное ПО в Синатре?

Я делаю защищенный веб-сервис с использованием Sinatra. Требуется SSL и токен безопасности, отправляемый с каждым запросом. Поэтому я создал простое промежуточное программное обеспечение, которое проверяет каждый входящий запрос на токен безопасности и отклоняет запрос, если он отсутствует или недействителен.

module MyWebService
  class App < Sinatra::Base
    use MyWebService::Security

    # ...
  end
end

Однако это, очевидно, сделало мой большой набор проверочных тестов неудачным, потому что они были написаны до того, как я добавил безопасность в веб-сервис.

Есть ли способ просто отключить промежуточное ПО после того, как оно было включено? Таким образом, весь мой набор тестов будет функционировать, и я смогу протестировать промежуточное ПО безопасности отдельно.

1 ответ

Решение

Я нашел исправный, хотя и не красивый, обходной путь.

Вместо включения промежуточного программного обеспечения в моем приложении, я включаю его в config.ru, Так:

module MyWebService
  class App < Sinatra::Base
    use MyWebService::Security   # Remove this line
  end
end

И в config.ru:

require "my_web_service"

app = MyWebService::App
app.use MyWebService::Security

run app

Теперь все мои проверочные тесты пройдены, и промежуточное программное обеспечение безопасности включено, когда я запускаю сервер.

Чтобы протестировать промежуточное ПО безопасности, я создаю подкласс своего приложения и включаю промежуточное ПО безопасности в подклассе:

class SecurityMiddlewareValidation < Minitest::Test
  include Rack::Test::Methods

  def app
    Class.new(MyWebService::App) { use MyWebService::Security }
  end

  # ...
end

Таким образом, мне не нужно отключать / включать промежуточное ПО между тестами.

Другие вопросы по тегам