1

我的集成测试如下所示:

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 失败,但它得到一个 Hash 并undefined read method for Hash在第 149 行说(这里:https ://github.com/rack/rack/blob/1.2.5/lib/rack/request .rb#L149)。

我怎样才能使这项工作?

4

2 回答 2

5

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

@oauth = OAuth2::Client.new('client_id', 'client_secret') do |b|
  b.request :url_encoded
  b.adapter :rack, Rails.application
end
于 2012-07-11T09:07:16.283 回答
1

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

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

我在一个示例应用程序上进行了尝试,它对我有用。祝你好运!

于 2012-04-26T17:33:13.743 回答