1

我正在使用 Sinatra 制作安全的 Web 服务。它需要 SSL 和随每个请求一起发送的安全令牌。因此,我制作了一个简单的中间件,用于检查每个传入请求是否有安全令牌,如果该请求丢失或无效,则拒绝该请求。

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

    # ...
  end
end

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

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

4

1 回答 1

3

我找到了一个有用的,虽然不是很好的解决方法。

我没有在我的应用程序中启用中间件,而是在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

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

于 2014-11-14T13:40:51.907 回答