我正在使用Sinatra制作安全的网络服务。它需要SSL和每个请求发送的安全令牌。因此,我制作了一个简单的中间件来检查每个传入的安全令牌请求,并在请求丢失或无效时拒绝该请求。
module MyWebService
class App < Sinatra::Base
use MyWebService::Security
# ...
end
end
但是,这显然使我的大型验证测试套件失败了,因为它们是在我向Web服务添加安全性之前编写的。
启用后,有没有办法简单地禁用中间件?这样我的整个测试套件仍然可以运行,我可以单独测试安全中间件。
答案 0 :(得分:2)
我找到了一个可用的,但不是很漂亮的解决方法。
我没有在我的应用程序中启用中间件,而是在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
这样我就不会需要在测试之间禁用/启用中间件。