Ruby on rails Rails 5.2.3使用rspec进行测试时,将所有参数数据类型转换为字符串
当我像这样向rails发送请求时,我使用rails 5.2.3并使用rspec rails(3.8.2)进行测试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
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