我可以看看如何测试机架中间件的响应,但是如何测试 请求 ?
那就是,如何测试中间件何时更改 应用程序的请求?
在RSpec和Sinatra工作。
答案 0 :(得分:2)
我认为你的意思是测试它是否在改变环境......
中间件类似于:
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
答案 1 :(得分:2)
@Denis的答案可行,但我个人更喜欢另一种选择,即将中间件放在裸机架应用程序中(无论是Sinatra还是其他),只需将请求作为响应传递并测试即可。这是大多数Rack中间件的推出方式。那,并且单元测试中间件的内部。
例如,这就是我done here with a fork of 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