如何使用 GET 请求为 Rspec 请求规范设置 request.body

Api*_*pie 6 ruby rspec ruby-on-rails rspec-rails

  • 导轨 5.0.0.1
  • 规范 3.5

我继承了一个代码库。在考虑重构之前,我正忙于编写集成测试以绑定应用程序功能。

我在控制器关注中有以下几行before_action。它似乎读取了请求正文。json此处的值用于提取用于验证请求的标识符。

request.body.rewind
body = request.body.read
json = JSON.parse(body) unless body.empty?
Run Code Online (Sandbox Code Playgroud)

我需要测试身份验证是否正确发生。如何设置request.bodyGET 请求规范?

haj*_*poj 7

我认为你应该能够通过请求环境来做到这一点RAW_POST_DATA

get root_path, {}, 'RAW_POST_DATA' => 'raw json string'
request.raw_post # "raw json string"
Run Code Online (Sandbox Code Playgroud)

请参阅: 如何在 Rails 功能测试中发送原始发布数据?


小智 5

https://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec

@rails_post_5

require "rails_helper"

RSpec.describe "Widget management", :type => :request do

  it "creates a Widget and redirects to the Widget's page" do
  headers = { "CONTENT_TYPE" => "application/json" }
  post "/widgets", :params => '{ "widget": { "name":"My Widget" } }', :headers => headers
    expect(response).to redirect_to(assigns(:widget))
  end

end
Run Code Online (Sandbox Code Playgroud)

要不就

post "/widgets", params: '{ "widget": { "name":"My Widget" } }'
Run Code Online (Sandbox Code Playgroud)

  • 看来这并没有真正回答OP的问题?OP询问如何获取主体,这里的示例不包括主体(OP示例中的生产代码不引用参数)。 (2认同)