class Object

Public Instance Methods

failure_reason(actual) click to toggle source
# File lib/rspec-javascript-matchers.rb, line 12
def failure_reason(actual)
  if defined?(V8)
    cxt = V8::Context.new
    begin
      cxt.eval(actual)
      ''
    rescue V8::Error => e
      #e.in_javascript? => true

      # this looks more like a runtime error rather than parse error
      return '' if e.root_cause.to_s.include?('is not defined')

      # Because <eval> doesn't provide any meaningful context info here:k:w
      # Invalid regular expression: missing / at <eval>:4:12
      e.root_cause.message.gsub('<eval>:', '') + "\nActual:\n#{actual}"
    end
  elsif defined?(MiniRacer)
    context = MiniRacer::Context.new
    begin
      context.eval(actual)
      ''
    rescue MiniRacer::ParseError => e
      # Because default is:
      # "Uncaught SyntaxError: Invalid regular expression: missing / at undefined:4:10"
      e.message.gsub('Uncaught SyntaxError: ', '').gsub(' undefined:', ' ') + "\nActual:\n#{actual}"
    rescue MiniRacer::RuntimeError => e
      # Most likely smth like: "ReferenceError: $ is not defined" which we don't care about in specs
      ''
    end
  else
    %(Maker sure you have "mini_racer" or "therubyracer" gem in your Gemfile dependencies)
  end
end