给定一个非 Rails 的 Rack 应用程序,
构建器.rb:
def app
Rack::Builder.new{
use Rack::Static, urls:static_paths, root:'public'
run ThaApp
}.to_app
end
如何使用 spec_helper 注入(inject)测试中间件?
最佳答案
如果您正在使用 Builder(使用、运行等),它看起来不您可以在运行时轻松地注入(inject)或删除中间件。这是代码:https://github.com/rack/rack/blob/master/lib/rack/builder.rb
请注意,它构建了中间件堆栈,当您调用 run 时,它会在中间件对象树中实例化堆栈(称为“@use”),每个中间件对象都引用下一个 - 请参阅方法“use”和“to_app”。
所以:不要认为 Builder 的设计目的是允许在堆栈中动态添加和减去中间件。
您可以重建一个新的动态堆栈,或者使用带有或不带有测试中间件的多个 Rack 应用程序,或者像 Rails 那样做一些后空翻来动态地重新配置堆栈。
您还可以仅在测试模式下添加一个测试中间件,或者添加一个可以轻松停用的中间件,使其成为直通中间件。然后你的 spec_helper 将设置并清除变量告诉它通过。
关于ruby - 如何将 Rack 中间件注入(inject)现有的 Rack 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650231/