使用Capybara Webkit在RSpec功能规范中模拟外部SSO登录

时间:2017-07-05 18:38:38

标签: ruby-on-rails rspec mocking capybara capybara-webkit

我的应用程序重定向到单一登录(SSO)的外部方。

登录后,该外部方会将该用户重定向回我应用的回叫路线。

这在控制器中实现如下:

SsoController < ApplicationController

  def connect
    # do stuff

    # Redirect to external party with some params
    redirect_to "www.external-party.com?foo=\"bar\""
  end

  def callback
    # Receive response from external party
    response = params[:response]

    # do stuff
  end
end

在我的功能规格中,我真的很喜欢这个被嘲笑,所以我可以从用户的角度测试端到端的功能。

我使用RSpec + Capybara,我想为以下流程建模 -

  • 用户点击某个按钮(例如&#34;登录&#34;)
  • 该按钮与上面的connect操作相关联,该操作会重定向到某个外部参与方
  • RSpec根据发送的params模拟响应,并将POST请求发送回我的应用(callback操作)
  • 登录用户并将其带入目标的进一步业务逻辑

我不确定如何进行第3步,尤其是在拦截呼叫,构建响应和发布回传物时

谢谢!

编辑:首选POST请求返回我的应用,但不是必须的。如果它是GET请求或重定向,我可以将我的应用配置为仅在测试环境中允许这些HTTP谓词。

1 个答案:

答案 0 :(得分:2)

而不是试图在应用程序代码中模拟这一点(在功能规范中不鼓励),最简单的方法就是使用像puffing billy这样的可编程代理 - https://github.com/oesmith/puffing-billy。这将让您回复测试浏览器向&#34; www.external-party.com提出请求?foo = \&#34; bar \&#34;&#34;以任何你想要的方式。