3

有人对在功能测试中模拟 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
4

1 回答 1

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.hasAppPermissiondefault.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 逻辑在检查该会话之前直接检查参数。这对我来说似乎有点古怪,但也许是有原因的。

于 2010-02-05T04:47:04.707 回答