我有一个使用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