Apipie получает целочисленный параметр в виде строки - PullRequest
0 голосов
/ 08 октября 2018

У меня есть следующий тест RSpec:

 it 'should not list alerts, since I do not have access to this model' do
   get :index, params: { model_id: @model2.id, workspace_id: @workspace.id }, as: :json
   expect(response).to have_http_status(:forbidden)
 end

, и он терпит неудачу, потому что Apipie жалуется, что workspace_id - это строка, а на самом деле это не целое число.Я отладил вызов, проверил @workspace и id определенно целое число.

Я вижу эту проблему сейчас, когда я переношу приложение на Rails 5.2.0 (ранее Rails 4).

Кто-нибудь видел что-то подобное?

Ответы [ 2 ]

0 голосов
/ 20 августа 2019

Да.Я столкнулся с той же проблемой.Я использую Rack :: Test с rspec, и Rack :: Test автоматически (ошибка) преобразует каждое значение в строку.Не уверен, что другие фоновые биты также делают это.

Единственный способ, с помощью которого я нашел тест в стойке для отправки чего-либо, кроме строк, в качестве значений, - это переопределение методов запроса, как описано здесь: https://stackoverflow.com/a/37234290/2326613

Существует также проблема, при которойЗначения BigDecimal встраиваются в строки с помощью «as:: json» - не влияя на OP (идентификаторы являются целыми числами), но другие могут найти этот вопрос при поиске.Обходной путь для исправления этой ошибки устарел и был удален командой Rails.Итак, чтобы иметь возможность следовать соглашениям JSON, которых может ожидать ваш JSON-потребитель (по сравнению с соглашениями Rails), вам нужно переопределить метод BigDecimal-as_json, чтобы исправить это: https://github.com/rails/rails/issues/25017

0 голосов
/ 08 октября 2018

Запрос GET не содержит тела, пока вы пытаетесь отправить какую-то полезную нагрузку.В случае запроса GET все параметры передаются как URL-запрос (например, /index?model_id=1&workspace_id=1), и все параметры являются строковыми.

У вас есть две опции:

  • Измените GET на POST, это разрешит запрос с телом.
  • Преобразование строки в целое число в действии.
...