我可以看到如何测试机架中间件的响应,但是如何测试请求?
也就是说,如何测试中间件何时更改了对应用程序的请求?
在 RSpec 和 Sinatra 工作。
我可以看到如何测试机架中间件的响应,但是如何测试请求?
也就是说,如何测试中间件何时更改了对应用程序的请求?
在 RSpec 和 Sinatra 工作。
我想你的意思是测试它是否正在改变环境......
中间件类似于:
class Foo
def initialize(app)
@app = app
end
def call(env)
# do stuff with env ...
status, headers, response = @app.call(env)
# do stuff with status, headers and response
[status, headers, response]
end
end
您可以使用伪造的应用程序(或 lambda,就此而言)对其进行初始化,该应用程序在进行一些测试后返回虚拟响应:
class FooTester
attr_accessor :env
def call(env)
# check that env == @env and whatever else you need here
[200, {}, '']
end
end
@Denis 的回答会起作用,但我个人更喜欢另一种选择,即将中间件放在一个裸 Rack 应用程序中(无论是 Sinatra 还是其他),然后将请求作为响应传递并对其进行测试。这是大多数 Rack 中间件的规格。那,以及对中间件内部进行单元测试。
例如,这就是我在这里使用 Rack Clicky 的一个分支所做的
编辑:与主应用程序分开测试中间件。
require 'lib/rack/mymiddelware.rb'
require 'sinatra/base'
describe "My Middleware" do
let(:app) {
Sinatra.new do
use MyMiddleware
get('/') { request.env.inspect }
end
}
let(:expected) { "Something you expect" }
before do
get "/"
end
subject { last_response.body }
it { should == expected }
end