2013-06-28 2 views
1

Я могу видеть, как проверить ответ промежуточного программного обеспечения стойки, но как проверить запрос?Как проверить запрос (а не ответ) промежуточного ПО Rack?

То есть, как проверить, когда промежуточное изменяет запрос Собирается в приложение?

Работает в RSpec и Sinatra.

ответ

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 

Вы можете инициализировать его с поддельной приложение (или лямбда, для этого материя), которая возвращает фиктивный ответ после выполнения некоторых тестов:

class FooTester 
    attr_accessor :env 

    def call(env) 
    # check that env == @env and whatever else you need here 
    [200, {}, ''] 
    end 
end 
+0

Да, я меняю env. Можете ли вы объяснить, как работает FooTester? Как это называется Foo? –

+1

@BSeven: 'tester = FooTester.new; tester.env = env; foo = Foo.new (тестер); foo.call (env); ' –

2

@ ответ Дениса будет работать, но я лично предпочитаю альтернативу, которая должна поставить в промежуточном программном обеспечении простое приложение Rack (будь то Sinatra или что-то еще), и просто передайте запрос как ответ и тест. Это связано с тем, как выполняется промежуточное ПО Rack. Это и модульное тестирование внутренних компонентов промежуточного программного обеспечения.

Например, это то, что я имею done here with a fork of Rack Clicky


Edit: тестирование ПО промежуточного отдельно от основного приложения.

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 
+0

Итак, как вы включаете промежуточное программное обеспечение как в приложение« Голая Rack », так и в приложение, которое его использует? –

+1

@ Совсем недавно используется анонимный класс Sinatra. Я привел пример в ответе. – iain

 Смежные вопросы

  • Нет связанных вопросов^_^