如何在Sinatra中禁用中间件?

时间:2014-11-14 10:51:18

标签: ruby sinatra rack rack-middleware

我正在使用Sinatra制作安全的网络服务。它需要SSL和每个请求发送的安全令牌。因此,我制作了一个简单的中间件来检查每个传入的安全令牌请求,并在请求丢失或无效时拒绝该请求。

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

    # ...
  end
end

但是,这显然使我的大型验证测试套件失败了,因为它们是在我向Web服务添加安全性之前编写的。

启用后,有没有办法简单地禁用中间件?这样我的整个测试套件仍然可以运行,我可以单独测试安全中间件。

1 个答案:

答案 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

这样我就不会需要在测试之间禁用/启用中间件。