1

neo4jをグラフdbとして使用する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

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

ここにはいくつかのオプションがあります。

1: このリンクに従ってください: http://net.tutsplus.com/tutorials/ruby/writing-an-api-wrapper-in-ruby-with-tdd/

Webmock と vcr gem を使用してそれを行う方法を順を追って説明します。アイデアは、最初にライブデータベースに対してテストを実行し、vcr がそれらを記録し、その後、記録された回答からテストが実行されるというものです。

2: CI 仮想マシン環境で新しいデータベースに対してテストを実行できます。Neography の travis.yml ファイルを見てみましょう。

スクリプト: "bundle exec rake neo4j:install neo4j:start spec --trace"

結果: http://travis-ci.org/#!/maxdemarzi/neography

3: dev または prod db とは異なるポート番号で test db を実行し、neography を spec ファイル内のポート番号に向けて、それを使用することができます。

これは良い質問なので、近日中に http://maxdemarzi.comのブログに投稿します。

于 2012-04-11T01:23:13.020 に答える