我正在开发一个利用 twitter oauth 的应用程序,但遇到了一个难题,试图弄清楚如何测试 twitter oauth。特别是尝试使用 Cucumber 和 Webrat/Selenium 来测试功能——如果用户是否授予对应用程序的 oauth 访问权限,则注册/登录过程中的某些步骤的行为会有所不同。
有没有人在他们的 Ruby on Rails Cucumber 功能(或任何其他测试框架)中成功地模拟或存根部分或所有 Twitter OAuth 系统?任何帮助,将不胜感激。
我正在开发一个利用 twitter oauth 的应用程序,但遇到了一个难题,试图弄清楚如何测试 twitter oauth。特别是尝试使用 Cucumber 和 Webrat/Selenium 来测试功能——如果用户是否授予对应用程序的 oauth 访问权限,则注册/登录过程中的某些步骤的行为会有所不同。
有没有人在他们的 Ruby on Rails Cucumber 功能(或任何其他测试框架)中成功地模拟或存根部分或所有 Twitter OAuth 系统?任何帮助,将不胜感激。
自 OP 以来已经一年多了,但我最近发现这篇关于使用 TwitterAuth 和 Cucumber 的文章对我有用。
http://blog.zerosum.org/2009/7/13/twitter-auth-integration-testing
我在我的测试用例中使用了模拟。我手动测试,弄清楚响应应该是什么,并覆盖了 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 中取消对您的应用程序的授权,并且如果您已经授权了该应用程序,则其行为会有所不同。
我没有 twitter 的精确配方(直到现在还没有完全做到这一点),但鉴于 OAuth 有一个描述不同可能流程的规范,我会尝试针对手头的情况列举它们中的每一个,并尝试自动化相互作用。
为了指导您,这里有一些指向相关信息的指针:
通常基于 Web 的流程是不同的(如您所见),无论用户是否未授权客户端应用程序: