1
我正在寫的一西納特拉API模擬服務器,它看起來像下面如何在Sinatra應用程序中棄用路線?
require 'sinatra/base'
class APIMockServer < Sinatra::Base
post '/mock' do
_body = params[:body]
_status = params[:status] || 200
APIMockServer.send params[:method], params[:action] do
body _body
status _status
end
'success'
end
run! if app_file == $0
end
我發個帖子請求/mock
時,西納特拉應用程序將動態生成的路徑。
require 'restclient'
RestClient.post(
'127.0.0.1:4567/mock',
{
action: '/sayhi',
method: 'get',
body: 'hello world'
}
)
到目前爲止,它工作正常,但是當我發送帶有相同action
另一個POST請求,但不生效。
require 'restclient'
RestClient.post(
'127.0.0.1:4567/mock',
{
action: '/sayhi',
method: 'get',
body: 'hello world, hello Sinatra' # the body is changing
}
)
我猜是因爲我定義了兩個路線名稱相同,所以西納特拉採取的第一個匹配的一個響應。我怎樣才能棄用第一個,以便最後一個可以生效?
我只看到這裏定義的一條路線。第二條路線在哪裏顯示? – tadman
在本例中,它由'APIMockServer.send params [:method],params [:action]'定義,它等於'get('/ sayhi'){'hello world'}。 – PieceHealth
這是一個奇怪的方式來做到這一點。您可能需要爲您的服務器設置「錄製」模式,並且稍後可以使用「播放」。這將避免這裏的衝突。這是[VCR]使用的模型(https://github.com/vcr/vcr)。 – tadman