为facebooker控制器编写功能测试?

时间:2010-02-03 17:30:41

标签: ruby-on-rails testing facebooker

任何人都有任何关于在功能测试中模拟facebook请求的最佳做法的提示吗?是否就像在请求中添加所有适当的参数一样简单?有没有办法将它们排除在外?

我正在使用facebooker,它带有模拟服务:

  # A mock service that reads the Facebook response from fixtures
  # Adapted from http://gist.github.com/44344
  #
  #   Facebooker::MockService.fixture_path = 'path/to/dir'
  #   Facebooker::Session.current = Facebooker::MockSession.create

但是当我写一个基本的get测试时,它会尝试将浏览器重定向到Facebook页面以添加应用程序,我认为这表明模拟不起作用。

  test "loads respondent" do
    Facebooker::Session.current = Facebooker::MockSession.create
    get :index
    puts @response.body # => <html><body>You are being <a href="http://www.facebook.com/install.php?api_key=65e9d2c74b295cc5bcea935b584557f6&amp;v=1.0&amp;next=http%3A%2F%2Ftest.host%2Ffacebook">redirected</a>.</body></html>
  end

1 个答案:

答案 0 :(得分:3)

我使用最新版本的facebooker(1.0.58):

# test_helper.rb
require 'facebooker/mock/session'
require 'facebooker/mock/service'

Facebooker::MockService.fixture_path = File.join(RAILS_ROOT, 'test', 'fixtures', 'facebook')

显然你必须在灯具中创建facebook目录,或者把它放在任何地方。在里面你必须为每个facebook方法添加一个文件夹,并为你想要测试的不同类型的响应添加一个xml文件。我必须添加facebook.users.getInfofacebook.users.hasAppPermission。最简单的方法是添加一个名为default.xml的文件,其中包含来自facebook wiki的示例代码,用于执行这些操作。

 # Controller test
 test "facebook action" do  
   get :index, {:fb_sig_added => true}, :facebook_session => Facebooker::MockSession.create
   assert_response :success
 end

据我所知,fb_sig_added参数是必要的,因为内部的facebooker逻辑在检查那个会话之前直接检查了params。这似乎对我来说有点笨拙,但也许是有原因的。