代码之家  ›  专栏  ›  技术社区  ›  tfwright

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

  •  3
  • tfwright  · 技术社区  · 15 年前

    有没有人对在功能测试中模拟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 回复  |  直到 15 年前
        1
  •  3
  •   tfwright    15 年前

    我在最新版本的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.getInfo facebook.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-u添加的参数是必要的,因为内部facebooker逻辑在检查会话之前直接检查参数。我觉得这有点不靠谱,但也许有原因。