使用 RSpec 输出 HTTP request/response 数据

Outputting HTTP request/response data with RSpec

我有一个 rails 项目服务于 JSON API,测试用 RSpec 编写。通常当 运行 规范(特别是请求规范)时,我有兴趣查看有关 HTTP request/response 的一些详细信息......即请求 URL、请求正文和响应正文,理想情况下 JSON 格式漂亮以便于阅读。这不是为了文档目的,而是作为开发/调试过程的一部分。

我有一个我写的辅助方法可以做到这一点...您只需将一个方法调用放到您的规范中,它就会打印出这些东西。

但是,如果 运行 规范中有一个开关,似乎会更好。 RSpec 有自定义格式化程序,我认为这可能是正确的方向,但在尝试构建一个时,我无法弄清楚如何像从规范内部一样访问 request/response 对象.

如何访问自定义 RSpec 格式化程序中的 request/response 对象?或者,也许是另一种解决问题的方法?

这是一个方法:

假设一个 rails 项目,在 spec_helper.rb 中定义一个全局 "after" 挂钩,如下所示:

config.after(:each) do #runs after each example
  if ENV['PRINTHTTP']
    #use request/response objects here, e.g. puts response.status
  end   
end

然后,你可以通过在命令行中添加环境变量来有条件地启用:

$ PRINTHTTP=1 rspec