brauchen nur die einfachsten Rack-App der Welt:
let(:app) { lambda {|env| [200, {'Content-Type' => 'text/plain'}, ['OK']]} }
auch Konstruktor Ihre Middle sollte eine App als erste parame erhalten ter kein Hash so sollte es lesen:
subject { MyMiddleWare.new(app) }
Aller Wahrscheinlichkeit nach, obwohl die Test die Middleware brauchen wird, um zu bestimmen, welche Auswirkungen auf die Anfrage hatte. Sie könnten also eine etwas anspruchsvollere Rack-App schreiben, um Ihre Middleware auszuspionieren.
und dann werden Sie wahrscheinlich Rack :: MockRequest verwenden möchten, um die Anfrage tatsächlich zu senden. Etwas wie:
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
Es gibt keinen Aufruf, hier zu unterbreiten, wie funktioniert das eigentlich? – Calin
Dies ist eigentlich keine gültige Rack App. Das "Lambda" müsste ein Argument sein, um eine gültige Rack App zu sein. – branch14
Aktualisiert zum Posten - Danke, @Calin. – Ritchie