#ruby-on-rails #minitest
#рубин на рельсах #самый маленький
Вопрос:
Самая маленькая заглушка возвращает ошибку:
JSON::ParserError: 767: unexpected token at '' app/controllers/concerns/universal_methods.rb:94:in `do_geocode_lookup'
эта строка universal_methods
-синтаксический анализатор JSON
results = JSON.parse(response)
Запрос на заглушку исходит из собственного предложения Minitest:
stub_request(:get, "https://api.[...]"). with( headers: { 'Accept'=gt;'*/*', 'Accept-Encoding'=gt;'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=gt;'Ruby' }). to_return(status: 200, body: "", headers: {})
Если вместо этого я выполню действие в блоке
WebMock.disable! [...] WebMock.enable!
Тест проходит до конца.
Что не так с самой маленькой предложенной заглушкой?
Комментарии:
1. Почти все. Анализатор JSON ожидает, что строка будет содержать по крайней мере один октет. Вместо того, чтобы просто вставлять пустую строку, используйте что-то, что на самом деле является допустимым JSON (например, «консервированный» ответ от API). Драгоценный камень видеомагнитофона полезен для этого.
2. Трудно действительно дать вам больше советов здесь, не видя тестируемого кода, но здесь много красных флагов — то, что вы делаете, скорее всего, не относится к проблеме (особенно с таким пышным названием). Вместо этого вы должны создать один объект, который касается границы приложения (клиента), который обрабатывает взаимодействие с api, и другой, который обрабатывает его интеграцию в ваш API. Просто отодвинув это на второй план, ваш контроллер становится очень толстым — замаскированным.
3. Кроме того, это предложение не имеет ничего общего с minitest — это webmock. И это не должно быть воспринято дословно. Это общее сообщение для любого типа запроса без подписи.