Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Http测试我的基于ruby的API_Ruby On Rails_Ruby_Ruby On Rails 4_Rspec_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Http测试我的基于ruby的API

Ruby on rails Http测试我的基于ruby的API,ruby-on-rails,ruby,ruby-on-rails-4,rspec,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,Ruby On Rails 5,我正在尝试测试我的ruby API,但在发送正确的数据格式时遇到了一些困难。我可以通过rspec控制器测试轻松创建所需的数据格式。和测试通过 这是我期望控制器上的数据: { agreements: [ { agreement_id: 1, money_value: 500, }, { agreement_id: 2, money_value: 1500 }, ] } 在我的控制器中,有一个期望数据格式如下:

我正在尝试测试我的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个错误的请求。尽管看起来一切正常,但在服务器端,当我检查一个请求时,我得到以下参数(相关部分):


另外,我使用的是rails 5。

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

data = {:agreements =>[{:agreement_id =>1, :money_value =>500}, {:agreement_id =>2, :money_value =>1500}]}
但根据您的控制器和您在params中接受的内容,您需要在其中插入另一个协议密钥:

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

params[:agreements]={agreements:#日志中与400相关的错误消息是什么?@Anthony这里是大堆栈跟踪的摘要:
param丢失或值为空:agreements
注意
{“agreements”=>“{:agreement\u id=>2,:money\u value=>1500}”
这里的值是另一个字符串,不是散列/json对象。我认为
设置表单数据
不是你想要的。你能试试这样吗:
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
    }
  ]}