2013-02-12 68 views
0

我用來將OpenTok集成到我的Rails應用程序中的gem位於:https://github.com/opentok/Opentok-Ruby-SDK。我基於此示例的應用程序的核心:http://www.tokbox.com/blog/building-a-video-party-app-with-ruby-on-railsOpenTok對象的Stubbing實例方法

在代碼的相關部分,我在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方法的問題?

回答

0

這裏是我一直在做的作品:

首先,我傾向於做是當應用程序加載,所以我沒有創建在每次請求的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..."}) 

如果你運行RSpec的帶wifi關閉調用了createSession不應再拋出一個錯誤。

下面是RSpec的存根文件:http://rubydoc.info/gems/rspec-mocks/frames

祝您好運!

0

問題是,每當我運行我的Rspec測試而沒有互聯網連接時,create_session似乎會拋出一個錯誤。

而不是嘗試存根,爲什麼不給你的測試模擬互聯網連接VCR

初始設置後,VCR可讓您運行所有測試,就好像您已連接到互聯網一樣。這使您可以離線運行測試,加速所有需要活動連接的測試,併爲您提供一致的結果集。

如果你有一個訂閱RailsCasts,瑞恩episode 291

做了一個關於VCR視頻