2009-06-12 61 views
8

我正在开发一个应用程序,它利用twitter oauth并跑入一堵砖墙,试图弄清楚如何测试twitter oauth。特别是试图使用Cucumber和Webrat/Selenium来测试功能 - 如果用户已经向应用程序授予了oauth访问权限,注册/登录过程中的某些步骤的行为将有所不同,等等。Ruby on Rails和Twitter的测试策略OAuth

有没有人在他们的Ruby on Rails Cucumber功能(或任何其他测试框架)上嘲讽或存储部分或全部Tw​​itter OAuth系统?任何帮助,将不胜感激。

回答

3

我没有twitter的精确配方(直到现在还没有完成),但考虑到OAuth有一个描述不同可能流程的规范,我会尽量列举它们中的每一个,尝试自动化交互。

要指导你,这里有几个指针相关信息:

通常根据对网络流量的不同(如你所见)是否是我们呃没有给授权客户端应用程序:

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

我曾经在我的测试案例嘲讽。我手动测试,找出了答案应该是什么,并且覆盖了ruby oAuth宝石。这里是一个测试案例(使用早该)一个成功的鸣叫:

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是我从我的手动测试收集到的答案 - 我把一个printf中的lib/OAuth的/标记/ access_token.rb:44:在`post'来捕获响应。

否则这几乎是不可能的测试,B/C正如你指出,微博也没办法,先取消从API应用程序,其作用不同,如果您已授权应用程序。