Rails 5.2.3 преобразование всех типов данных params в строку при тестировании с использованием rspec - PullRequest
0 голосов
/ 16 мая 2019

Я использую рельсы 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

в рельсах все целые числа преобразуются в строку следующим образом

<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>

Но если я использую curl для отправки запроса, я вижу, что целое число не преобразуется в строку.

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

Спасибо залюбая помощь!

1 Ответ

2 голосов
/ 16 мая 2019

Полезные нагрузки JSON могут содержать пять типов значений : string, number, integer, boolean и null.

. Строки HTTP-запроса, напротив,, только строки .

По умолчанию спецификации запроса используют кодировку, указанную в спецификации HTTP - т.е. все параметры являются строками .Вот почему вы видите, что параметры преобразуются.

Если ваша производственная система отправляет JSON, вам нужно указать, чтобы тест тоже сделал это - например, добавив as: :json, как вы делали выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...