1

我有一个使用 neo4j 作为图形数据库的 sinatra 应用程序。该应用程序通过neography 作为REST 客户端访问数据库。

我想使用 rspec 模拟这个客户端以进行测试。实现这一目标的最佳做法是什么?

4

2 回答 2

3

找到我的答案:

西纳特拉应用程序:

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
于 2012-04-11T09:56:15.613 回答
1

你有几个选择:

一:点击此链接: 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上发表一篇文章

于 2012-04-11T01:23:13.020 回答