Skip to content

Commit

Permalink
Refined error reporting
Browse files Browse the repository at this point in the history
* Create a hash for Sentry (Raven) and Honeybadger for prerender errors
  • Loading branch information
justin808 committed May 9, 2018
1 parent d364ebf commit fa6d213
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ Changes since last non-beta release.

*Please add entries here for your pull requests that are not yet released.*

#### Changed
- More detailed errors for Honeybadger and Sentry. [PR 1081](https://github.com/shakacode/react_on_rails/pull/1081) by [justin808](https://github.com/justin808).

### [11.0.4] - 2018-05-3

#### Changed
Expand Down
37 changes: 35 additions & 2 deletions lib/react_on_rails/prerender_error.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,34 @@

# rubocop:disable: Layout/IndentHeredoc
module ReactOnRails
class PrerenderError < StandardError
class PrerenderError < ::ReactOnRails::Error
attr_reader :component_name, :err, :props, :js_code, :console_messages

# err might be nil if JS caught the error
def initialize(component_name: nil, err: nil, props: nil,
js_code: nil, console_messages: nil)
@component_name = component_name
@err = err
@props = props
@js_code = js_code
@console_messages = console_messages

backtrace, message = calc_message(component_name, console_messages, err, js_code, props)

super([message, backtrace].compact.join("\n"))
end

def to_honeybadger_context
to_error_context
end

def raven_context
to_error_context
end

private

def calc_message(component_name, console_messages, err, js_code, props)
message = "ERROR in SERVER PRERENDERING\n".dup
if err
# rubocop:disable Layout/IndentHeredoc
Expand Down Expand Up @@ -33,8 +57,17 @@ def initialize(component_name: nil, err: nil, props: nil,
MSG
# rubocop:enable Layout/IndentHeredoc
end
[backtrace, message]
end

super([message, backtrace].compact.join("\n"))
def to_error_context
{
component_name: component_name,
err: err,
props: props,
js_code: js_code,
console_messages: console_messages
}
end
end
end
49 changes: 49 additions & 0 deletions spec/react_on_rails/prender_error_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# frozen_string_literal: true

require_relative "spec_helper"

module ReactOnRails
describe PrerenderError do
let(:err) do
result = nil
begin
raise "Some Error"
rescue StandardError => e
result = e
end
result
end

let(:expected_error_info) do
{
component_name: "component_name",
err: err,
props: { a: 1, b: 2 },
js_code: "console.log('foobar')",
console_messages: "console_messages"
}
end

subject do
PrerenderError.new(
component_name: expected_error_info[:component_name],
err: expected_error_info[:err],
props: expected_error_info[:props],
js_code: expected_error_info[:js_code],
console_messages: expected_error_info[:console_messages]
)
end

describe ".to_honey_badger_context" do
it "returns the correct context" do
expect(subject.to_honeybadger_context).to eq(expected_error_info)
end
end

describe ".raven_context" do
it "returns the correct context" do
expect(subject.raven_context).to eq(expected_error_info)
end
end
end
end

0 comments on commit fa6d213

Please sign in to comment.