我有一个使用neo4j作为图形数据库的sinatra应用程序。 该应用程序通过neography作为REST客户端访问数据库。
我想使用rspec模拟此客户端以进行测试。 实现这一目标的最佳做法是什么?
答案 0 :(得分:2)
找到我的答案:
sinatra app:
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
答案 1 :(得分:1)
你有几个选择:
一:点击此链接:http://net.tutsplus.com/tutorials/ruby/writing-an-api-wrapper-in-ruby-with-tdd/
它使用webmock和vcr gem逐步解释如何使用它。我们的想法是,您第一次对实时数据库运行测试,vcr记录它们,然后您的测试将用于记录答案。
二:您可以在CI虚拟机环境中针对新数据库运行测试。 看一下Neography的travis.yml文件:
脚本:“捆绑exec rake neo4j:安装neo4j:启动spec --trace”
结果: http://travis-ci.org/#!/maxdemarzi/neography
三:您可以在与您的dev或prod db不同的端口号上运行测试数据库,在您的spec文件中指向neography并使用它。
这是一个很好的问题,所以我会在http://maxdemarzi.com
上的某一天在我的博客上发帖。