Wrap the context render panic.

Panic handling middleware can test for this error and decide to
supress the error or not.
This commit is contained in:
Dan Mullineux 2022-12-06 13:51:07 +00:00
parent 80cd679c43
commit e7f7980ff3
2 changed files with 14 additions and 1 deletions

View File

@ -922,7 +922,10 @@ func (c *Context) Render(code int, r render.Render) {
}
if err := r.Render(c.Writer); err != nil {
panic(err)
panic(Error{
Err: err,
Type: ErrorTypeRender,
})
}
}

View File

@ -655,6 +655,16 @@ func TestContextRenderPanicIfErr(t *testing.T) {
defer func() {
r := recover()
assert.Equal(t, "TestPanicRender", fmt.Sprint(r))
// confirm the recovered object is an error
err, ok := r.(error)
assert.True(t, ok)
// the error returned should be a gin render Error
e := Error{}
assert.True(t, errors.As(err, &e))
assert.ErrorContains(t, e.Unwrap(), "TestPanicRender")
assert.True(t, e.IsType(ErrorTypeRender))
}()
w := httptest.NewRecorder()
c, _ := CreateTestContext(w)