【发布时间】:2012-04-10 22:31:28
【问题描述】:
我有一个使用 neo4j 作为图形数据库的 sinatra 应用程序。 应用通过neography作为REST客户端访问数据库。
我想使用 rspec 模拟这个客户端以进行测试。 实现这一目标的最佳做法是什么?
【问题讨论】:
标签: rspec mocking sinatra rspec2 neo4j
我有一个使用 neo4j 作为图形数据库的 sinatra 应用程序。 应用通过neography作为REST客户端访问数据库。
我想使用 rspec 模拟这个客户端以进行测试。 实现这一目标的最佳做法是什么?
【问题讨论】:
标签: rspec mocking sinatra rspec2 neo4j
找到我的答案:
sinatra 应用程序:
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
【讨论】:
你有几个选择:
一:点击此链接: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 db 不同的端口号上运行测试数据库,将 neography 指向您的规范文件中的那个并使用它。
这是一个很好的问题,所以我会在我的博客上写一篇关于它的帖子,地址是 http://maxdemarzi.com
【讨论】: