【问题标题】:Http testing my ruby based APIHttp 测试我的基于 ruby​​ 的 API
【发布时间】:2017-06-27 12:57:54
【问题描述】:

我正在尝试测试我的 ruby​​ API,但在发送正确的数据格式时遇到了一些困难。我可以从 rspec 控制器测试轻松创建所需的数据格式。并且测试通过。

这是我期望控制器上的数据:

{
  agreements: [
    {
      agreement_id: 1,
      money_value: 500,
    },
    {
      agreement_id: 2,
      money_value: 1500
    },
  ]
}

并且在我的控制器中有这个期望数据格式如下:

def permitted_params
    params.permit(agreements:
      [
        :agreement_id,
        :money_value
    ]).require(:agreements)
end

但是,当我尝试使用 HTTP 客户端对其进行测试时,方法如下:

data = {:agreements =>[{:agreement_id =>1, :money_value =>500}, {:agreement_id =>2, :money_value =>1500}]}

req = Net::HTTP::Post.new(uri)
req.set_form_data(data)
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(req) 
end

我收到了 400 个错误请求。尽管一切看起来都正确,但是在服务器端,当我检查请求时,我得到了这个参数(相关部分):

<ActionController::Parameters {"agreements"=>"{:agreement_id =>2, :money_value=>1500}"

这告诉我两件事,首先它将协议视为哈希而不是数组,而且它只看到该哈希的最后一个元素(因为它是相同的键)。

我做错了什么?为什么我的请求是用哈希而不是数组构造的?

问题更新:

这是与 400 相关的错误:

param is missing or the value is empty: agreements

我也在使用 rails 5。

【问题讨论】:

  • 日志中的哪些错误信息与 400 相关联?
  • @Anthony 这里是大型堆栈跟踪的摘要:param is missing or the value is empty: agreements
  • 注意{"agreements"=&gt;"{:agreement_id =&gt;2, :money_value=&gt;1500}"这里的值是另一个字符串而不是哈希/json对象。我不认为set_form_data 是你想要的。你能试试这样的吗:stackoverflow.com/a/21263005/3109182

标签: ruby-on-rails ruby ruby-on-rails-4 rspec ruby-on-rails-5


【解决方案1】:

您发送的数据似乎与您在控制器中所期望的不匹配。

data = {:agreements =>[{:agreement_id =>1, :money_value =>500}, {:agreement_id =>2, :money_value =>1500}]}

但根据您的控制器和您在参数中接受的内容,您需要在其中插入另一个协议密钥:

params[:agreements] = {agreements: #<-----------Notice the agreements key here# [
    {
      agreement_id: 1,
      money_value: 500,
    },
    {
      agreement_id: 2,
      money_value: 1500
    }
  ]}

因此,您必须向要发送的数据添加另一个 :agreements 键,并将其也添加到您的测试数据中。

(或者您可以更改参数。)对您来说更容易。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2015-01-07
    相关资源
    最近更新 更多