Bạn chỉ cần ứng dụng Giá đơn giản nhất thế giới:
let(:app) { lambda {|env| [200, {'Content-Type' => 'text/plain'}, ['OK']]} }
Ngoài ra, trình xây dựng phần mềm trung gian của bạn sẽ nhận được ứng dụng làm trò chơi đầu tiên ter không phải là băm nên nó phải đọc:
Mặc dù vậy, thử nghiệm của bạn sẽ cần phải xác định tác dụng của phần mềm trung gian theo yêu cầu. Vì vậy, bạn có thể viết một ứng dụng giá tinh vi hơn một chút để theo dõi phần mềm trung gian của bạn.
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
và sau đó bạn có thể muốn sử dụng Rack :: MockRequest để thực sự gửi yêu cầu. Một cái gì đó như:
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
Không có lời gọi nào để thực hiện ở đây, điều này thực sự hoạt động như thế nào? – Calin
Đây thực sự không phải là ứng dụng Rack hợp lệ. 'Lambda' sẽ phải tranh luận là một ứng dụng Rack hợp lệ. – branch14
Đã cập nhật để đăng lên chủ đề - cảm ơn, @Calin. – Ritchie