rails / rspec如何在使用body发布请求时获取响应?

时间:2015-06-01 13:12:55

标签: ruby-on-rails rspec

我正在构建一个Rails后端API,我有一个接收发布请求的控制器。我使用rspec来调用端点,到目前为止看起来它正常工作。但是我无法想象我的回答。 (控制器工作并呈现正确的JSON)。我的规格看起来像这样:

require "spec_helper"
require "rspec_api_documentation/dsl"

resource "Data" do
  header "Accept", "application/json"
  header "Content-Type", "application/json"
  header "Host", "public.example.com"

  describe "receives POST request with body", :type => :request do
    params = { type: ["1", "2", "3"], fromDate: "26/05/2015", toDate: "30/05/2015" }
    post "/api/v1/data/totals", params.to_json
  end
end

此测试通过,但我似乎无法检索呈现的JSON。我已尝试在描述块中添加以下内容:

puts response_body
puts response.body
puts page.body

有谁知道正确的语法?

2 个答案:

答案 0 :(得分:1)

describe区块内,您的测试需要在itspecify区块内。

修改 - 我看到你正在使用rspec_api_documentation gem。我对此并不熟悉,但看起来你将两种语法混合在一起 - 宝石的DSL和RSpec自己的DSL。 gem的自述文件未显示正在使用的describe。我建议坚持使用普通的RSpec直到你通过,然后尝试介绍宝石。

答案 1 :(得分:0)

所以我在朋友的帮助下弄清楚了。这是使用rspec api文档/ dsl:

的正确语法
require "spec_helper"
require "rspec_api_documentation/dsl"

resource "Data" do
  header "Accept", "application/json"
  header "Content-Type", "application/json"
  header "Host", "public.example.com"

  describe "Post a request to totals" do
    parameter :type,"selected data type"
    parameter :fromDate, "start date"
    parameter :toDate, "end date"

    let(:type) { ["1", "2", "3"] }
    let(:fromDate) { "26/05/2015" }
    let(:toDate) { "30/05/2015" }

    post "/api/v1/data/totals" do
      let(:raw_post) { params.to_json }
      example_request "with a body" do
        expect(response_body).to include(fromDate, toDate)
        expect(status).to eq(200)
      end
    end
  end
end