Как исправить «нет неявного преобразования строки в Ха sh» - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь запустить тест с RSpe c, но он всегда возвращает одну и ту же ошибку:

DevicesController#update when user is a manager must update any device
     Failure/Error: put device_path device_id, params: params, headers: { 'Content-Type': 'application/vnd.api+json' }

     TypeError:
       no implicit conversion of String into Hash

Моя функция с параметрами запроса:

def update_params(device, device_id)
  {
    data: {
      id: device.id,
      type: 'device',
      attributes: {
        device_id: device_id 
      }
    }
  }.to_json
end

Мой тест используя фабрики:

context 'when user is a manager' do
  let(:user) { create(:manager).account }
  let(:firebase_token) { Faker::Crypto.sha1 }
  let(:device_id) { physical_device.id }
  let(:params) { update_params(physical_device, firebase_token) }
  it 'must update any device' do
    expect(Device.find(device_id).device_id).to eq(firebase_token)
  end
end

Запрос устройства обновления ОС:

put device_path device_id, params: params, headers: { 'Content-Type': 'application/vnd.api+json' }

1 Ответ

0 голосов
/ 18 января 2020

ActionController :: TestCase ожидает, что params будет ha sh (например, headers).

Но params, который вы передаете вызову этого метода

put device_path device_id, params: params, headers: { 'Content-Type': 'application/vnd.api+json' }

генерируется методом update_params, и этот метод вызывает to_json для сгенерированного ha sh и поэтому возвращает JSON строку .

Просто удалите .to_json из последней строки метода update_params, и все будет в порядке.

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