【问题标题】:Rails integration tests with Faraday & Omniauth使用 Faraday 和 Omniauth 进行 Rails 集成测试
【发布时间】:2012-04-26 12:42:05
【问题描述】:

我的集成测试如下所示:

class OAuthTest < ActionDispatch::IntegrationTest
  ...

  @client = OAuth2::Client.new(                                                
    client_id,                                              
    client_secret,                                          
    { :site => 'https://provider', :token_url => '/oauth/access_token' }
  )                                                                            

  @client.connection.build do |b|                                              
    b.adapter :action_dispatch, self
  end                                                                          

  access_token = @client.auth_code.get_token(...)
  access_token.get("/user.json")

在 Faraday 0.7.6 中它工作得很好,action_dispatch 适配器会将 http 请求路由到我的 Rails 应用程序(调用 users_controller)。但是在 Faraday 0.8.0 中,action_dispatch 适配器被rack(参见https://github.com/technoweenie/faraday/pull/134)取代,我无法让它工作。

我想我需要把上面的代码改成这样:

@client.connection.build do |b|      
  b.adapter :rack, self.app          
end                                  

但它在 Rack (1.2.5) 期待 Stream 时失败,但它得到一个哈希并在第 149 行显示undefined read method for Hash(此处为:https://github.com/rack/rack/blob/1.2.5/lib/rack/request.rb#L149)。

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby oauth oauth-2.0 faraday


    【解决方案1】:

    您将需要添加中间件 url_encoded 以使其工作;

    @oauth = OAuth2::Client.new('client_id', 'client_secret') do |b|
      b.request :url_encoded
      b.adapter :rack, Rails.application
    end
    

    【讨论】:

      【解决方案2】:

      在您的测试套件中,您可以通过app 变量直接访问机架应用程序。代码应该是:

      @client.connection.build do |b|      
        b.adapter :rack, app
      end
      

      我在a sample app 上试过这个,它对我有用。祝你好运!

      【讨论】:

      • 感谢您的回答。虽然它对我没有多大帮助......我的self.appapp 相同。我看到的问题是 @env["rack.input"] 在我的情况下是一个哈希。顺便说一句:我在 Rails 3.0.10 上并且正在使用 Omniauth(这可能与它有关,你知道,omniauth 在幕后做了很多笨拙的事情)。在此处查看它的初始化:github.com/intridea/oauth2/blob/master/lib/oauth2/client.rb#L48
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      相关资源
      最近更新 更多