繁体   English   中英

存根OpenTok对象的实例方法

[英]Stubbing instance method for OpenTok object

我用于将OpenTok集成到我的Rails应用程序中的gem位于: https : //github.com/opentok/Opentok-Ruby-SDK 我基于此示例构建了应用程序的核心: http : //www.tokbox.com/blog/building-a-video-party-app-with-ruby-on-rails

在代码的相关部分,我将在config_opentok方法中创建一个@opentok对象:

    def config_opentok
        if @api_key.nil? or @api_secret.nil?
            if Rails.env.development?
                @api_key = API_KEY
                @api_secret = API_SECRET
            else
                @api_key = ENV['API_KEY']
                @api_secret = ENV['API_SECRET']
            end
        end
        if @opentok.nil?
            @opentok = OpenTok::OpenTokSDK.new(@api_key, @api_secret)
        end
    end

我正在使用以下代码创建会话:

    config_opentok

    if Rails.env.development?
        session = @opentok.create_session('localhost')
    else
        session = @opentok.create_session(request.remote_addr)
    end

麻烦的是,create_session似乎抛出错误

SocketError: getaddrinfo: nodename nor servname provided, or not known

每当我在没有互联网连接的情况下运行Rspec测试时。 因此,我想存根该方法,以便它仅返回一个哈希{:sessionId => 1}。 但是我在弄清楚如何使用该方法时遇到了麻烦。 我不能只对OpenTok模块或OpenTok :: OpenTokSDK类进行存根。 我该如何处理存根create_session方法?

这是我一直在做的工作:

首先,我倾向于做的是在应用加载时初始化OpenTok对象,这样我就不会在每个请求上都创建一个OpenTok对象。 为此,我在config / initializers文件夹中创建一个ruby文件(apis.rb)。

我的apis.rb看起来像这样:

TB_KEY = ENV['TB_KEY']
TB_SECRET = ENV['TB_SECRET']
OTSDK = OpenTok::OpenTokSDK.new TB_KEY, TB_SECRET

在控制器中,要生成一个会话,我将简单地调用OTSDK.createSession ,类似于您已有的会话。

要使用rspec进行测试,您只需在测试文件中编写:

OTSDK.stub(:createSession).and_return( {:sessionId => "1MX_2A3453095J0TJ30..."} )

如果您在wifi处于关闭状态下运行rspec,则调用createSession应该不再引发错误。

这是rspec存根的文档: http: //rubydoc.info/gems/rspec-mocks/frames

祝好运!

问题是,每当我在没有Internet连接的情况下运行Rspec测试时,create_session似乎都会引发错误。

与其尝试进行存根测试,不如通过VCR为您的测试提供模拟互联网连接?

初始设置后,VCR可以让您运行所有测试,就好像您已主动连接到Internet。 这使您可以脱机运行测试,加快需要活动连接的所有测试的速度,并为您提供一致的结果。

如果您订阅了RailsCasts ,Ryan会在第291集中制作有关VCR的视频

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM