github.com/zak-blake/goa@v1.4.1/middleware/recover_test.go (about)

     1  package middleware_test
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"context"
     8  
     9  	"github.com/goadesign/goa"
    10  	"github.com/goadesign/goa/middleware"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Recover", func() {
    16  	var h goa.Handler
    17  	var err error
    18  
    19  	JustBeforeEach(func() {
    20  		rg := middleware.Recover()(h)
    21  		err = rg(nil, nil, nil)
    22  	})
    23  
    24  	Context("with a handler that panics with a string", func() {
    25  		BeforeEach(func() {
    26  			h = func(ctx context.Context, rw http.ResponseWriter, req *http.Request) error {
    27  				panic("boom")
    28  			}
    29  		})
    30  
    31  		It("creates an error from the panic message", func() {
    32  			Ω(err).Should(HaveOccurred())
    33  			Ω(err.Error()).Should(HavePrefix("panic: boom\n"))
    34  		})
    35  	})
    36  
    37  	Context("with a handler that panics with an error", func() {
    38  		BeforeEach(func() {
    39  			h = func(ctx context.Context, rw http.ResponseWriter, req *http.Request) error {
    40  				panic(fmt.Errorf("boom"))
    41  			}
    42  		})
    43  
    44  		It("creates an error from the panic error message", func() {
    45  			Ω(err).Should(HaveOccurred())
    46  			Ω(err.Error()).Should(HavePrefix("panic: boom\n"))
    47  		})
    48  	})
    49  
    50  	Context("with a handler that panics with something else", func() {
    51  		BeforeEach(func() {
    52  			h = func(ctx context.Context, rw http.ResponseWriter, req *http.Request) error {
    53  				panic(42)
    54  			}
    55  		})
    56  
    57  		It("creates a generic error message", func() {
    58  			Ω(err).Should(HaveOccurred())
    59  			Ω(err.Error()).Should(HavePrefix("unknown panic\n"))
    60  		})
    61  	})
    62  })