Stringify / Parse запроса данных через rspec - PullRequest
0 голосов
/ 19 сентября 2019

Я отправляю запросы на внешний интерфейс, где я строжай свои данные (массив объектов), а затем анализирую их в серверной части.

Когда я запускаю свои спецификации, я получаю ошибку no implicit conversion of Array into String

Как я могу структурировать свои данные в моей спецификации, чтобы они соответствовали тому, что я делаю в веб-интерфейсе?Или есть другой способ, где мне не нужно разбирать / анализировать мои данные для обработки всего этого?

Вот так выглядит моя структура данных внешнего интерфейса:

"categories_and_years": JSON.stringify(
  [
    {"category_id": 1, "year_ids":[1, 2, 3]},
    {"category_id": 2, "year_ids":[2, 3]},
  ]
)

В моемконтроллер, я проверяю данные, это сначала массив:

  def validate_categories_and_years_array
    @cats_and_yrs = JSON.parse(params[:categories_and_years])
    return unless @cats_and_yrs
    if !@cats_and_yrs.is_a?(Array)
      render_response(:unprocessable_entity, { description_detailed: "categories_and_years must be an array of objects"})
    end
  end

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

context "when all categories and years are valid" do
      let(:params) do
        {
          school_id: school.id,
          id: standard_group.id,
          categories_and_years: [
            { category_id: category_1.id, year_ids: [ year_1.id ] }
          ]
        }
      end
      it "adds standards from specific categories and years to the school" do
        post :add, params: params, as: :json
        expect(school.achievement_standards).to contain_exactly( std_1 )
      end
    end

1 Ответ

0 голосов
/ 20 сентября 2019

В этом посте объясняется разница между обычным хешем ruby, который есть в вашей спецификации, и HashWithIndifferentAccess.

Вы также можете попробовать to_json?

Параметры хэш-ключей в виде символов против строк

params = ActiveSupport::HashWithIndifferentAccess.new()
params['school_id'] = school.id
params['id'] = standard_group.id
params['categories_and_years'] = [
        { category_id: category_1.id, year_ids: [ year_1.id ] }
]
params = params.to_json

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