Ruby on Rails 和 Twitter OAuth 的测试策略

8
我正在开发一个应用程序,利用 Twitter OAuth,并且在尝试测试 Twitter OAuth 时遇到了困难。特别是我想使用 Cucumber 和 Webrat/Selenium 来测试功能,但是在注册/登录过程中的某些步骤会根据用户是否已经授权给该应用程序访问 OAuth 而表现出不同的行为,等等。

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

3个回答

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来捕获响应。

否则,这几乎是不可能测试的,因为正如你所指出的,Twitter没有办法从API中取消授权您的应用程序,并且如果您已经授权了应用程序,则会以不同的方式运行。


3

是的,其中的秘诀是使用FakeWeb来模拟Twitter后端。不错的文章。 - Rob

2
我对于Twitter没有精确的配方(直到现在还没有做过),但是考虑到OAuth有描述不同可能流程的规范,我会尝试枚举每个流程来自动化交互。
以下是一些相关信息的指针,以指导您: 通常,基于Web的流程与用户未授权客户端应用程序时的流程不同(如您所见)。
如果用户尚未授权客户端应用程序,则会重定向到服务提供商网站。
在服务提供商网站,如果用户尚未登录,则需要使用其凭据进行身份验证。
一旦在服务提供商身份验证成功后,就需要授权或拒绝授权给客户端应用程序/服务。
一旦用户做出了授权响应,它将被发送回客户端网站,客户端网站可以获得访问令牌。
如果用户已经授权客户端应用程序/服务,那么它可以使用访问令牌来跳过这些步骤并访问服务提供商的用户数据/API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接