Ruby on rails Http测试我的基于ruby的API
我正在尝试测试我的ruby API,但在发送正确的数据格式时遇到了一些困难。我可以通过rspec控制器测试轻松创建所需的数据格式。和测试通过 这是我期望控制器上的数据: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 }, ] } 在我的控制器中,有一个期望数据格式如下:
{
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
}
]}