2014-10-02 93 views
0

我在試驗,我試圖從RSpec啓動虛擬Sinatra應用程序,並在規範完成時將其殺死。喜歡的東西:從測試/規範或另一個ruby腳本啓動sinatra

# spec/some_spec.rb 

before(:all) 
    # launch sinatra dummy app 
end 

after (:all) 
    # kill sinatra dummy app 
end 

it 'should return list of whatever' do 
    expect(JSON.parse(make_request('0.0.0.0:4567/test.json'))) 
    .to include('whatever') 
end 

我可以使用system("ruby test/dummy/dummy_app.rb"),但我怎麼能只殺死進程?有誰知道我可以在測試(或從另一個ruby腳本)內啓動Sinatra嗎?我瞭解WebMocks,但我想看看是否可以通過這種方式讓我的測試工作。

回答

1

在RSpec下查看「Testing Sinatra with Rack::Test」。我建議你使用該代碼作爲樣板開始。

只需添加到您的描述塊:

def app 
    Sinatra::Application 
end 

我建議你讀了RSpec的。


由於要測試的外部系統,通過您的評論的外觀,而不是system "curl whatewer.com",您可以使用網:: HTTP作出對響應請求,然後進行測試。

看看「Testing an external API using RSpec's request specs」。

+0

謝謝你的鏈接到sinatra RSpec部分,我之前紅了,但我沒有意識到它,然後我可以使用它我想用它的方式。 – equivalent8 2014-10-02 13:58:29

+0

嗨,對不起,我接受了你的回答,但我發現它並沒有完全滿足我的需求。我正在寫的更多的是煙霧測試,我需要對實際的實時服務器進行實際的請求。我正在重新考慮遺留代碼,他們在很多地方使用'system'curl whatewer.com「'我想重構一下,首先我需要確保我不會破壞現有的東西。然而這是個好地方(所以+1)。 – equivalent8 2014-10-02 14:27:31

+0

對我認爲你想要做的事做出了更新。 – 2014-10-02 15:56:21

0

當我寫請求規格以確保功能不會被破壞時,我決定寧願編寫單獨的黃瓜功能。好的是我可以使用Capybara,並且感謝Selenium Web Drive,我可以在運行測試之前啓動服務器。

所以,我創建了一個虛擬西納特拉的應用程序(將代表到我的測試是做請求(包括討厭system('curl whatever.com'))。

實際的代碼我所要做的就是存根外部服務通過這些方法捲曲使用Capybara.current_session.server.hostCapybara.current_session.server.port

一旦我和我重新分解所有我需要做的就是刪除黃瓜/水豚配置中的水豚服務器變量,以及硒網絡驅動器來完成。

短暫改變後的測試將是s直到工作,並將有效。

更新

最後我寫了這一切與RSpec的測試要求,如黃瓜做了有點費時,我已經花了太多時間在這。

我用RSpec標記標記了這些請求測試,並且在我午餐之前,我手動提供午餐簡單的Sinatra/Grape虛擬API應用程序,請求被髮送到該應用程序。 (然後我用這個標籤運行RSpec測試)

因此,基本上,我最終得到了使用net/http使用WebMock並且不需要服務器的功能規範,並且請求需要運行服務器的測試在我運行規格之前。所以原來的問題仍然存在,如何午餐服務器測試開始

後我蓋我gonig重寫捲曲網/ HTTP的所有功能之前,但我要保持這些要求的規格爲我發現他們是瘋狂的API場景(如測試https +挖掘身份驗證)的好主意

相關問題