我有一個使用neo4j作爲圖形數據庫的sinatra應用程序。 應用程序通過neography訪問數據庫作爲REST客戶端。我如何在sinatra中設置一個模擬數據庫進行測試?
我想模擬這個客戶端用於測試目的,使用rspec。 達到此目的的最佳做法是什麼?
我有一個使用neo4j作爲圖形數據庫的sinatra應用程序。 應用程序通過neography訪問數據庫作爲REST客戶端。我如何在sinatra中設置一個模擬數據庫進行測試?
我想模擬這個客戶端用於測試目的,使用rspec。 達到此目的的最佳做法是什麼?
你這裏有幾個選項:
一:按照此鏈接:http://net.tutsplus.com/tutorials/ruby/writing-an-api-wrapper-in-ruby-with-tdd/
它解釋瞭如何一步一步使用webmock和錄像機寶石做到這一點。這個想法是你第一次運行你的測試對一個實時數據庫,vcr記錄它們,然後你的測試將運行記錄的答案。
二:您可以在CI虛擬機環境中針對新鮮數據庫運行測試。 看看爲Neography的travis.yml文件:
腳本: 「捆綁EXEC耙的Neo4j:安裝的Neo4j:啓動規範--trace」
,結果: http://travis-ci.org/#!/maxdemarzi/neography
三:你可以在不同於dev或prod db的端口號上運行一個測試數據庫,將neography指向你的spec文件中的那個數據庫並存放在它上面。
這是一個很好的問題,所以我會在http://maxdemarzi.com
做它一個職位上我的博客之一,這些天發現我的答案是:
西納特拉應用:
require 'sinatra'
module Backend
class Neography
# stuff
end
end
helpers Backend
before do
@neo = Backend::Neography.new
end
get '/:id' do
"#{@neo.get_node(params[:id])}"
end
rspec的:
describe 'The App' do
include Rack::Test::Methods
def app
Sinatra::Application
end
def mock_neography
@neo_mock = mock("Backend::Neography")
@neo_mock.stub!("get_node") {"something else"}
Backend::Neography.stub(:new).with(any_args()).and_return(@neo_mock)
end
it "gets a node" do
mock_neography
get '/5'
last_response.should be_ok
end
end
thanks max!我對嘲笑駐留在sinatra中的低級對象的方式更感興趣,而不管它的實際功能如何。 – Dan 2012-04-11 05:39:25
我找到了我的答案。我也在neography中提出了一個問題;你可能想看看。 https://github.com/maxdemarzi/neography/issues/39 – Dan 2012-04-11 09:50:04