@@ -16,6 +16,14 @@ def raise_err
16
16
end
17
17
end
18
18
19
+ class ErrorAnalyzer
20
+ def call ( _memo , visit_type , irep_node )
21
+ if irep_node . name == "raiseError"
22
+ raise GraphQL ::AnalysisError , "this should not be wrapped by a backtrace, but instead, returned to the client"
23
+ end
24
+ end
25
+ end
26
+
19
27
let ( :resolvers ) {
20
28
{
21
29
"Query" => {
@@ -49,6 +57,7 @@ def raise_err
49
57
GRAPHQL
50
58
GraphQL ::Schema . from_definition ( defn , default_resolve : resolvers ) . redefine {
51
59
lazy_resolve ( LazyError , :raise_err )
60
+ query_analyzer ( ErrorAnalyzer . new )
52
61
}
53
62
}
54
63
@@ -103,7 +112,7 @@ def raise_err
103
112
assert_includes err . message , rendered_table
104
113
# The message includes the original error message
105
114
assert_includes err . message , "This is broken: Boom"
106
- assert_includes err . message , "spec/graphql/backtrace_spec.rb:27 " , "It includes the original backtrace"
115
+ assert_includes err . message , "spec/graphql/backtrace_spec.rb:35 " , "It includes the original backtrace"
107
116
assert_includes err . message , "more lines"
108
117
end
109
118
@@ -133,6 +142,11 @@ def raise_err
133
142
] . join ( "\n " )
134
143
assert_includes err . message , rendered_table
135
144
end
145
+
146
+ it "returns analysis errors to the client" do
147
+ res = schema . execute ( "query raiseError { __typename }" )
148
+ assert_equal "this should not be wrapped by a backtrace, but instead, returned to the client" , res [ "errors" ] . first [ "message" ]
149
+ end
136
150
end
137
151
138
152
# This will get brittle when execution code moves between files
0 commit comments