2012-04-10 3 views
1

У меня есть приложение sinatra, которое использует neo4j как график db. приложение получает доступ к db через неографию как клиент REST.Как установить фиктивный db для тестирования в синатра?

Я хочу издеваться над этим клиентом для целей тестирования, используя rspec. Какова наилучшая практика для достижения этой цели?

ответ

1

У вас есть несколько вариантов здесь:

One: по этой ссылке: http://net.tutsplus.com/tutorials/ruby/writing-an-api-wrapper-in-ruby-with-tdd/

Это объясняет, шаг за шагом, как это сделать с помощью webmock и видеомагнитофона камня. Идея заключается в том, что вы запускаете свои тесты против живой базы данных в первый раз, vcr записывает их, а затем ваши тесты будут работать с записанными ответами.

Два: вы можете запускать свои тесты против нового db в среде виртуальной машины CI. Посмотрите на файл travis.yml для Neography:

сценарий: "расслоение Exec грабли Neo4j: установить Neo4j: начать спецификации --trace"

и результаты: http://travis-ci.org/#!/maxdemarzi/neography

Три: Вы можете запустить тестовый db на другом номере порта, чем ваш dev или prod db, указать неографию на то, что в вашем spec-файле, и иметь на нем.

Это хороший вопрос, так что я буду делать пост на нем в своем блоге один из этих дней в http://maxdemarzi.com

+0

спасибо max! Меня больше интересовал способ издеваться над объектом низкого уровня, который находится в синатре, независимо от его фактической функциональности. – Dan

+0

Я нашел свой ответ. Я также открыл проблему в неографии; вы можете посмотреть. https://github.com/maxdemarzi/neography/issues/39 – Dan

2

Найдено мой ответ:

Синатра приложение:

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 
Смежные вопросы