Как отключить промежуточное ПО в Синатре?
Я делаю защищенный веб-сервис с использованием 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
Таким образом, мне не нужно отключать / включать промежуточное ПО между тестами.