Ответ 1
Вам просто нужно простое приложение для стойки в мире:
let(:app) { lambda {|env| [200, {'Content-Type' => 'text/plain'}, ['OK']]} }
Кроме того, ваш конструктор промежуточного программного обеспечения должен получать приложение в качестве первого параметра, а не хеша, поэтому он должен читать:
subject { MyMiddleWare.new(app) }
По всей вероятности, ваш тест должен будет определить, какое влияние оказывает промежуточное ПО на запрос. Таким образом, вы можете написать несколько более сложное приложение стойки, чтобы шпионить за вашим промежуточным программным обеспечением.
class MockRackApp
attr_reader :request_body
def initialize
@request_headers = {}
end
def call(env)
@env = env
@request_body = env['rack.input'].read
[200, {'Content-Type' => 'text/plain'}, ['OK']]
end
def [](key)
@env[key]
end
end
и тогда вы, вероятно, захотите использовать Rack:: MockRequest для отправки запроса. Что-то вроде:
describe MyMiddleWare do
let(:app) { MockRackApp.new }
subject { described_class.new(app) }
context "when called with a POST request" do
let(:request) { Rack::MockRequest.new(subject) }
before(:each) do
request.post("/some/path", input: post_data, 'CONTENT_TYPE' => 'text/plain')
end
context "with some particular data" do
let(:post_data) { "String or IO post data" }
it "passes the request through unchanged" do
expect(app['CONTENT_TYPE']).to eq('text/plain')
expect(app['CONTENT_LENGTH'].to_i).to eq(post_data.length)
expect(app.request_body).to eq(post_data)
end
end
end
end