integtest/spec/helper/matcher/initial_js_state.rb (18 lines of code) (raw):

# frozen_string_literal: true ## # Matches extracts the "initial javascript state" of a templated html page. # If the page doesn't contain the initial js state it'll be `nil`. RSpec::Matchers.define :initial_js_state do |expected| match do |actual| expected.matches? extract(actual) end failure_message do "doc_body didn't match: #{expected.failure_message}" end def extract(contents) start_boundry = 'window.initial_state = ' start = contents.index start_boundry return unless start start += start_boundry.length stop = contents.index '</script>', start return unless stop txt = contents[start, stop - start] JSON.parse txt, symbolize_names: true end end