2012-04-10 10 views
1

Ich habe eine Sinatra-App, die neo4j als Graph db verwendet. Die App greift über neography als REST-Client auf die Datenbank zu.wie setze ich eine mock db zum testen in sinatra?

Ich möchte diesen Client zu Testzwecken mit rspec spotten. Was ist die beste Vorgehensweise, um dies zu erreichen?

Antwort

1

Sie haben ein paar Möglichkeiten:

One: Folgen Sie diesem Link: http://net.tutsplus.com/tutorials/ruby/writing-an-api-wrapper-in-ruby-with-tdd/

Es erklärt Schritt für Schritt, wie es geht webmock verwenden und die vcr gem. Die Idee ist, dass Sie Ihre Tests zum ersten Mal gegen eine Live-Datenbank durchführen, vcr zeichnet sie auf, und danach laufen Ihre Tests von den aufgezeichneten Antworten ab.

Zwei: Sie können Ihre Tests für eine neue Datenbank in einer CI-Umgebung für virtuelle Maschinen ausführen. Werfen Sie einen Blick auf die travis.yml Datei für Neography:

Skript: "Bündel exec Rake Neo4j: install Neo4j: start spec --trace"

und die Ergebnisse: http://travis-ci.org/#!/maxdemarzi/neography

Drei: Sie können eine Test-Datenbank auf einer anderen Port-Nummer als Ihre Dev- oder Prod-Datenbank ausführen, zeigen Sie neography auf die in Ihrer Spezifikationsdatei und haben Sie es.

Es ist eine gute Frage, also werde ich bei http://maxdemarzi.com

+0

danke max! Ich interessierte mich mehr für die Art und Weise, wie man ein niedriges Level-Objekt, das in Sinatra residiert, verspottet, ungeachtet seiner tatsächlichen Funktionalität. – Dan

+0

Ich habe meine Antwort gefunden. Ich habe auch ein Thema in der Neographie geöffnet; Vielleicht möchten Sie einen Blick darauf werfen. https://github.com/maxdemarzi/neography/issues/39 – Dan

2

Gefunden meine Antwort einen Beitrag auf es auf meinem Blog eines Tages tun:

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 
Verwandte Themen