8

我正在开发一个利用 twitter oauth 的应用程序,但遇到了一个难题,试图弄清楚如何测试 twitter oauth。特别是尝试使用 Cucumber 和 Webrat/Selenium 来测试功能——如果用户是否授予对应用程序的 oauth 访问权限,则注册/登录过程中的某些步骤的行为会有所不同。

有没有人在他们的 Ruby on Rails Cucumber 功能(或任何其他测试框架)中成功地模拟或存根部分或所有 Twitter OAuth 系统?任何帮助,将不胜感激。

4

3 回答 3

3

自 OP 以来已经一年多了,但我最近发现这篇关于使用 TwitterAuth 和 Cucumber 的文章对我有用。

http://blog.zerosum.org/2009/7/13/twitter-auth-integration-testing

于 2010-08-19T14:31:55.673 回答
3

我在我的测试用例中使用了模拟。我手动测试,弄清楚响应应该是什么,并覆盖了 ruby​​ oAuth gem。这是成功推文的一个测试用例(使用 Shoulda):

 context 'cork/tweet' do
    setup do
      response = Net::HTTPResponse.new("1.1", 200, "")
      Net::HTTPResponse.any_instance.stubs(:body).returns JSON_RESPONSE
      OAuth::AccessToken.any_instance.stubs(:post).returns(response)
      post :create, :cork_id => @cork.id, :message=>MESSAGE     
    end
    should_respond_with :redirect
    should_change('Tweet.count' , :by => 1) {Tweet.count}
    .. and so on

JSON_RESPONSE 是我从手动测试中收集的答案 - 我在 lib/oauth/tokens/access_token.rb:44:in 'post' 中放置了一个 printf 来捕获响应。

否则,这几乎是不可能测试的,b/c 正如您所指出的,Twitter 无法从 API 中取消对您的应用程序的授权,并且如果您已经授权了该应用程序,则其行为会有所不同。

于 2010-09-07T13:40:03.203 回答
2

我没有 twitter 的精确配方(直到现在还没有完全做到这一点),但鉴于 OAuth 有一个描述不同可能流程的规范,我会尝试针对手头的情况列举它们中的每一个,并尝试自动化相互作用。

为了指导您,这里有一些指向相关信息的指针:

通常基于 Web 的流程是不同的(如您所见),无论用户是否未授权客户端应用程序:

  • 如果用户尚未授权客户端应用程序,则将其重定向到服务提供商站点
    • 在服务提供商处,用户尚未登录,需要使用他的凭据进行身份验证
    • 一旦在服务提供商处进行了身份验证,就需要授权或拒绝对客户端应用程序/服务的授权
    • 一旦他给出了授权响应,它就会被发送回客户端站点,然后可以获取访问令牌
  • 如果用户已经授权客户端应用程序/服务,那么它可以使用访问令牌绕过这些步骤并在服务提供商处访问用户的数据/API
于 2009-06-13T20:02:36.200 回答