Ruby on Rails的测试策略& Twitter OAuth

时间:2009-06-12 14:16:23

标签: ruby-on-rails ruby twitter oauth

我正在开发一个利用twitter oauth的应用程序,并试图弄清楚如何测试twitter oauth。特别是尝试使用Cucumber和Webrat / Selenium来测试功能 - 如果用户已经提供了对应用程序的oauth访问权限,那么注册/登录过程中的某些步骤会有不同的行为。

有没有人在他们的Ruby on Rails Cucumber功能(或任何其他测试框架)中嘲笑或抄袭部分或所有Twitter OAuth系统是否成功?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

我没有精确的推文配方(直到现在还没有这么做),但考虑到OAuth有一个描述不同可能流程的规范,我会尝试为手头的情况枚举每一个,并尝试自动化交互。

为了指导您,以下是相关信息的几点建议:

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

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

答案 2 :(得分: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中设置了printf:44:在'post'中捕获响应。

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