【问题标题】:how do i set a mock db for testing in sinatra?如何设置模拟数据库以在 sinatra 中进行测试?
【发布时间】:2012-04-10 22:31:28
【问题描述】:

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

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

【问题讨论】:

    标签: rspec mocking sinatra rspec2 neo4j


    【解决方案1】:

    找到我的答案:

    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
    

    【讨论】:

      【解决方案2】:

      你有几个选择:

      一:点击此链接: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

      【讨论】:

      • 谢谢麦克斯!我对模拟 sinatra 中的低级对象的方式更感兴趣,不管它的实际功能如何。
      • 我找到了答案。我还打开了一个关于neography的问题;你可能想看看。 github.com/maxdemarzi/neography/issues/39
      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2014-10-23
      相关资源
      最近更新 更多