@@ -159,6 +159,43 @@ def execute_multiplex(multiplex:)
159159 assert_includes err . message , "more lines"
160160 end
161161
162+ it "annotates crashes from user code when using inline fragments" do
163+ err = assert_raises ( GraphQL ::Backtrace ::TracedError ) {
164+ backtrace_schema . execute <<-GRAPHQL , root_value : "Root"
165+ query($msg: String = \" Boom\" ) {
166+ field1 {
167+ ... on Thing {
168+ boomError: raiseField(message: $msg)
169+ }
170+ }
171+ }
172+ GRAPHQL
173+ }
174+
175+ # GraphQL backtrace is present
176+ expected_graphql_backtrace = [
177+ "4:15: Thing.raiseField as boomError" ,
178+ "2:11: Query.field1" ,
179+ "1:9: query" ,
180+ ]
181+ assert_equal expected_graphql_backtrace , err . graphql_backtrace
182+
183+ hash_inspect = { message : "Boom" } . inspect
184+ # The message includes the GraphQL context
185+ rendered_table = [
186+ 'Loc | Field | Object | ' + "Arguments" . ljust ( hash_inspect . size ) + ' | Result' ,
187+ '4:15 | Thing.raiseField as boomError | :something | ' + hash_inspect + ' | #<RuntimeError: This is broken: Boom>' ,
188+ '2:11 | Query.field1 | "Root" | ' + "{}" . ljust ( hash_inspect . size ) + ' | {}' ,
189+ '1:9 | query | "Root" | ' + { "msg" => "Boom" } . inspect . ljust ( hash_inspect . size ) + ' | {field1: {...}}' ,
190+ ] . join ( "\n " )
191+
192+ assert_includes err . message , "\n " + rendered_table
193+ # The message includes the original error message
194+ assert_includes err . message , "This is broken: Boom"
195+ assert_includes err . message , "spec/graphql/backtrace_spec.rb:49" , "It includes the original backtrace"
196+ assert_includes err . message , "more lines"
197+ end
198+
162199 it "annotates errors from Query#result" do
163200 query_str = "query StrField { field2 { strField } __typename }"
164201 context = { backtrace : true }
0 commit comments