首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试em-mongo + Goliath?

如何测试em-mongo + Goliath?
EN

Stack Overflow用户
提问于 2012-05-04 19:48:02
回答 2查看 481关注 0票数 0

下面的应用程序将一些数据保存到数据库中,我想测试它是否正确保存。

代码语言:javascript
复制
require 'goliath'

class App < Goliath::API
  def response(env)
     db = EM::Mongo::Connection.new('localhost').db('hello')
     db.collection('coll').insert({'identifier => 1'})

    [204, {}, {}]
  end
end

require 'goliath/test_helper'    
Goliath.env = :test

describe App do
  include Goliath::TestHelper

  it do
    with_api(described_class) do
      get_request do |req|
        db = EM::Mongo::Connection.new('localhost').db('hello')
        db.collection('coll').first.callback do |rec|
          rec['identifier'].should == 100
        end
      end
    end
  end
end

由于reactor在callback返回之前结束,所以上面的规范通过了。我想过手动启动一个反应堆,就像这样:

代码语言:javascript
复制
EM.run do
  db = EM::Mongo::Connection.new('localhost').db('hello')
  db.collection('coll').first.callback do |rec|
    rec['identifier'].should == 100

    EM.stop
  end
end

虽然我不确定是否为每个规范启动反应堆是一个很好的做法。帮帮忙好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-05 14:32:34

问题是,在设置get_request时,我们在请求上添加了一个回调来停止事件循环。因此,一旦你的块完成(甚至在连接创建之前),它就会停止反应器。

我不确定最好的解决方案,但一个糟糕的解决方案是覆盖:

代码语言:javascript
复制
def hookup_request_callbacks(req, errback, &blk)
  req.callback &blk
  req.callback { stop }

  req.errback &errback if errback
  req.errback { stop }
end

在你的测试类中包含Goliath::TestHelper之后。然后,我认为,你应该能够编写自己的代码,就像这样:

代码语言:javascript
复制
def hookup_request_callbacks(req, errback, &blk)
  req.callback &blk

  req.errback &errback if errback
  req.errback { stop }
end

您只需确保在Mongo的回调中调用stop。

我还没有真正测试过这个,所以如果有些东西不能工作,请告诉我,我可以进一步深入研究。

票数 1
EN

Stack Overflow用户

发布于 2012-08-20 05:36:00

@dj2的解决方案效果很好,但我决定在规范中使用mongo gem,而不是em-mongo。因为mongo阻塞,所以我不必担心Goliath在数据库返回结果之前停止反应器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10448258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档