RSpec - текст JSON должен содержать как минимум два октета - PullRequest
0 голосов
/ 10 ноября 2018

Две неисправные спецификации после обновления rspec-rails (2.5.2 -> 3.8.1) и capybara (2.18.0 -> 3.10.1):

Не совсем уверен, что здесь происходит. Похоже, текст в ожидании усекается?!?

  let(:story_attributes) do
    {
      title:       'Edited title',
      description: 'Edited location',
      start_year:  '2001',
      start_month: 'December',
      start_day:   '5',
      end_year:    '2001',
      end_month:   'October',
      end_day:     '10',
      is_range:    true,
      cover_image: {
        url: 'http://placehold.it/edited.png'
      }
    }
  end

  ... 

  within 'section.story-cover' do
    expect(page).to have_text 'Edited title'
    expect(page).to have_text 'Edited location'
    expect(page).to have_text 'December 5th - October 10th, 2001'
  end

В первом неудачном примере (ниже) «Отредактированное местоположение» обрезается.

Во втором примере expect(page).to have_text 'Edited title Edited location', где находится только «Отредактированный заголовок \ nОтредактированный локатор».

Тогда возникает проблема «JSON-текст должен содержать как минимум два октета», которая может быть или не быть связана, но эта проблема проходила до обновления rspec-rails & capybara.ds

Мысли

RSpec Failures:

  1) Story editing published edit story
     Failure/Error: JSON.parse(response.body)

     JSON::ParserError:
       A JSON text must at least contain two octets!
     # ./app/services/converter/image_service.rb:36:in `post_to_filepicker'
     # ./app/services/converter/image_service.rb:18:in `convert_format'
     # ./app/services/converter/image_service.rb:11:in `block in convert'
     # ./app/services/converter/image_service.rb:10:in `each'
     # ./app/services/converter/image_service.rb:10:in `convert'
     # ./app/models/images/image.rb:5:in `convert'
     # ./app/models/images/image.rb:20:in `enqueue_conversion'
     # ./app/services/story/updating_service.rb:14:in `update'
     # ./app/controllers/stories_controller.rb:58:in `update'
     # ------------------
     # --- Caused by: ---
     # Capybara::ExpectationNotMet:
     #   expected to find text "Edited location" in "Edited title\nLyla HoegerEditedDecember 5th - October 10th, 2001Download"
     #   ./spec/features/stories/editing_spec.rb:86:in `block (4 levels) in <top (required)>'

  2) Story editing private private story should be read after editing
     Failure/Error: JSON.parse(response.body)

     JSON::ParserError:
       A JSON text must at least contain two octets!
     # ./app/services/converter/image_service.rb:36:in `post_to_filepicker'
     # ./app/services/converter/image_service.rb:18:in `convert_format'
     # ./app/services/converter/image_service.rb:11:in `block in convert'
     # ./app/services/converter/image_service.rb:10:in `each'
     # ./app/services/converter/image_service.rb:10:in `convert'
     # ./app/models/images/image.rb:5:in `convert'
     # ./app/models/images/image.rb:20:in `enqueue_conversion'
     # ./app/services/story/updating_service.rb:14:in `update'
     # ./app/controllers/stories_controller.rb:58:in `update'
     # ------------------
     # --- Caused by: ---
     # Capybara::ExpectationNotMet:
     #   expected to find text "Edited title Edited location" in "Edited title\nEdited locat"
     #   ./spec/features/stories/editing_spec.rb:115:in `block (4 levels) in <top (required)>'

1 Ответ

0 голосов
/ 10 ноября 2018

Одним из больших изменений между Capybara 2.x и 3.x было то, что в Capybara 3.x текст возвращается настолько близко к тому, что отображается, насколько это возможно. Это означает, что теперь в возвращаемый текст включаются переводы строк, когда они будут отображаться пользователю - https://github.com/teamcapybara/capybara/blob/master/UPGRADING.md. Вам либо нужно изменить ожидаемый текст на «Отредактированный заголовок \ nОтредактированное местоположение» в spec / features / Stories / edit_spec_spec .rb: 115 или, если вас не интересует перевод строки, вы можете использовать опцию :normalize_ws => expect(page).to have_text("Edited title Edited location", normalize_ws: true)

...