Получите «JSON::Ошибка синтаксического анализа: 809: неожиданный токен в «» при анализе ответа.корпус в спецификациях

#json #ruby-on-rails #rspec

Вопрос:

Итак, я потерял слишком много времени, пытаясь решить эту проблему. Я хотел бы проанализировать ответ json в моих спецификациях запроса rspec, и для этого я создал:

 # support/helper_methods.rb  module HelperMethods    def json_response  JSON.parse(response.body)  end  end  
 # rails_helper.rb  RSpec.configure do |config|  ...  config.include HelperMethods end  

и хотел бы использовать его в простой спецификации запроса:

 # requests/post_spec.rb  require 'rails_helper'  RSpec.describe 'Posts', type: :request do  describe 'GET /posts' do  let(:post) { create(:post) }   before { post }   it 'returns status 200' do  get '/posts'   expect(response.status).to eq(200)  end   it 'renders posts' do  get '/posts'   expect(json_response).to include('Some title')  end  end end  

Однако второй пример завершается ошибкой с сообщением:

 # bundle exec rspec result  Failures:   1) Posts GET /posts renders posts  Failure/Error: JSON.parse(response.body)    JSON::ParserError:  809: unexpected token at 'lt;!DOCTYPE htmlgt;  lt;htmlgt;  lt;headgt;  lt;titlegt;Bloglt;/titlegt;  lt;meta name="viewport" content="width=device-width,initial-scale=1"gt;        lt;link rel="stylesheet" media="all" href="/assets/application-04c3ae28f07e1bf734223bf526d0cdd296440ef53bcb3f80b9f093c6bf02f747.css" data-turbolinks-track="reload" /gt;  lt;script src="/packs-test/js/application-dd998cb6b794ecb7e8af.js" data-turbolinks-track="reload"gt;lt;/scriptgt;  lt;/headgt;    lt;bodygt;  lt;p id="notice"gt;lt;/pgt;    lt;h1gt;Postslt;/h1gt;    lt;tablegt;  lt;theadgt;  lt;trgt;  lt;th colspan="3"gt;lt;/thgt;  lt;/trgt;  lt;/theadgt;    lt;tbodygt;    lt;trgt;  lt;tdgt;lt;a href="/posts/56"gt;Some titlelt;/agt;lt;/tdgt;  lt;tdgt;lt;a href="/posts/56/edit"gt;Editlt;/agt;lt;/tdgt;  lt;tdgt;lt;a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/posts/56"gt;Destroylt;/agt;lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt;    lt;brgt;    lt;a href="/posts/new"gt;New Postlt;/agt;    lt;/bodygt;  lt;/htmlgt;  '  # ./spec/support/helper_methods.rb:8:in `json_response'  # ./spec/requests/posts_spec.rb:21:in `block (3 levels) in lt;top (required)gt;'  Finished in 49.49 seconds (files took 0.46187 seconds to load) 2 examples, 1 failure  Failed examples:  rspec ./spec/requests/posts_spec.rb:17 # Posts GET /posts renders posts  

Я попытался выяснить, не является ли это какой-то проблемой с доктипом, однако пропуск дает ту же ошибку, но на этот раз с html-тегом. Я считаю, что это что-то очень тривиальное, я не вижу ничего плохого в этом.

Я был бы очень признателен за некоторую помощь в этом вопросе.

Комментарии:

1. HTML-это не JSON-вы не можете проанализировать HTML-dom в JSON.

2. ах, вы совершенно правы.. я забыл, что мои предыдущие проекты, из которых я слепо скопировал его, были только для api. Спасибо!

Ответ №1:

Что ж, оказалось, что это была ошибка с моей стороны. Как упоминал dbugger в комментарии, вы не можете анализировать html-файлы в json.