Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 Rails 5.2.3使用rspec进行测试时,将所有参数数据类型转换为字符串_Ruby On Rails_Json_Ruby_Rspec_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails Rails 5.2.3使用rspec进行测试时,将所有参数数据类型转换为字符串

Ruby on rails Rails 5.2.3使用rspec进行测试时,将所有参数数据类型转换为字符串,ruby-on-rails,json,ruby,rspec,ruby-on-rails-5,Ruby On Rails,Json,Ruby,Rspec,Ruby On Rails 5,当我像这样向rails发送请求时,我使用rails 5.2.3并使用rspec rails(3.8.2)进行测试 let(:params) do { down_payment: 10_000, asking_price: 100_000, payment_schedule: 'weekly', amortization_period: 5 } end it 'works' do get :calculate, p

当我像这样向rails发送请求时,我使用rails 5.2.3并使用rspec rails(3.8.2)进行测试

  let(:params) do
    {
      down_payment: 10_000,
      asking_price: 100_000,
      payment_schedule: 'weekly',
      amortization_period: 5
    }
  end
  it 'works' do
    get :calculate, params: params, format: :json
    expect(response.status).to eq 200
  end
我也试过了

  it 'works' do
    get :calculate, params: params, as: :json
    expect(response.status).to eq 200
  end
在rails中,所有整数都被转换成如下字符串

<ActionController::Parameters {"amortization_period"=>"5", "asking_price"=>"100000", "down_payment"=>"10000", "payment_schedule"=>"weekly", "format"=>"json", "controller"=>"payment_amount", "action"=>"calculate", "payment_amount"=>{}} permitted: false>
谢谢你的帮助

JSON有效载荷可以包含:
string
number
integer
boolean
null

相比之下,HTTP查询字符串仅为字符串

默认情况下,请求规范使用HTTP规范中指定的编码,即所有参数都是字符串。这就是为什么会看到参数被转换


如果您的生产系统正在发送
JSON
,您需要告诉测试也这样做-例如,通过添加
as::JSON
,如上所述。

您如何使用curl发送它们,使它们没有转换为字符串?我无法复制此内容。@maxpleaner请查看我的更新。我添加了
curl
commands,因为curl的工作方式与预期一样——遵循JSON标准——而不是rails团队认为每个人“应该做的事情”另外,我们与API智能交互的大多数机器都不遵守它们的宗教信仰。请注意——在后端使用rack test也存在同样的问题——post方法接受json并添加反斜杠字符串。如果您使用to::json,它不会发送反斜杠,但仍然会将非字符串值转换为字符串,因此无法测试发送整数的帖子。找到了一个解决方案-发布来回答另一个问题:谢谢,为什么我添加了
as::json
它仍然在将参数转换为字符串?无法重现。当我将
添加为_json
时,我得到整数。也许您正在使用一些额外的库(您没有提到),这会改变行为。
curl -X GET -H "Content-Type: application/json"  -d ‘{"asking_price": 100000 ,"payment_schedule": "monthly", "down_payment": 10000, "amortization_period": 5  }' http://localhost:3000/payment-amount