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