func TestCustomErrors(t *testing.T) { api := iris.New() // first register the routes needed for _, r := range routesCustomErrors { if r.Register { api.HandleFunc(r.Method, r.Path, func(ctx *iris.Context) { ctx.EmitError(r.Status) }) } } // register the custom errors api.OnError(404, func(ctx *iris.Context) { ctx.Write("%s", notFoundMessage) }) api.OnError(500, func(ctx *iris.Context) { ctx.Write("%s", internalServerMessage) }) // create httpexpect instance that will call fasthtpp.RequestHandler directly e := httpexpect.WithConfig(httpexpect.Config{ Reporter: httpexpect.NewAssertReporter(t), Client: fasthttpexpect.NewBinder(api.NoListen().Handler), }) // run the tests for _, r := range routesCustomErrors { e.Request(r.Method, r.RequestPath). Expect(). Status(r.Status).Body().Equal(r.Body) } }
func TestPathEscape(t *testing.T) { api := iris.New() api.Get("/details/:name", func(ctx *iris.Context) { name := ctx.Param("name") highlight := ctx.URLParam("highlight") ctx.Text(iris.StatusOK, fmt.Sprintf("name=%s,highlight=%s", name, highlight)) }) e := httpexpect.WithConfig(httpexpect.Config{Reporter: httpexpect.NewAssertReporter(t), Client: fasthttpexpect.NewBinder(api.NoListen().Handler)}) e.Request("GET", "/details/Sakamoto desu ga?highlight=text").Expect().Status(iris.StatusOK).Body().Equal("name=Sakamoto desu ga,highlight=text") }
func newHttpExpect(t *testing.T, h fasthttp.RequestHandler) *httpexpect.Expect { // create fasthttp.RequestHandler //handler := g.Router.Handler // create httpexpect instance that will call fasthtpp.RequestHandler directly e := httpexpect.WithConfig(httpexpect.Config{ Reporter: httpexpect.NewAssertReporter(t), Client: &http.Client{ Transport: httpexpect.NewFastBinder(h), Jar: httpexpect.NewJar(), }, }) return e }
func irisTester(t *testing.T) *httpexpect.Expect { handler := IrisHandler() return httpexpect.WithConfig(httpexpect.Config{ BaseURL: "http://example.com", Client: &http.Client{ Transport: httpexpect.NewFastBinder(handler), Jar: httpexpect.NewJar(), }, Reporter: httpexpect.NewAssertReporter(t), Printers: []httpexpect.Printer{ httpexpect.NewDebugPrinter(t, true), }, }) }
func TestRouter(t *testing.T) { api := iris.New() for idx := range routes { r := routes[idx] if r.Register { api.HandleFunc(r.Method, r.Path, func(ctx *iris.Context) { ctx.SetStatusCode(r.Status) if r.Params != nil && len(r.Params) > 0 { ctx.SetBodyString(ctx.Params.String()) } else if r.UrlParams != nil && len(r.UrlParams) > 0 { if len(r.UrlParams) != len(ctx.URLParams()) { t.Fatalf("Error when comparing length of url parameters %d != %d", len(r.UrlParams), len(ctx.URLParams())) } paramsKeyVal := "" for idxp, p := range r.UrlParams { val := ctx.URLParam(p.Key) paramsKeyVal += p.Key + "=" + val + "," if idxp == len(r.UrlParams)-1 { paramsKeyVal = paramsKeyVal[0 : len(paramsKeyVal)-1] } } ctx.SetBodyString(paramsKeyVal) } else { ctx.SetBodyString(r.Body) } }) } } // create httpexpect instance that will call fasthtpp.RequestHandler directly e := httpexpect.WithConfig(httpexpect.Config{ Reporter: httpexpect.NewAssertReporter(t), Client: fasthttpexpect.NewBinder(api.NoListen().Handler), }) // run the tests (1) for idx := range routes { r := routes[idx] e.Request(r.Method, r.RequestPath). Expect(). Status(r.Status).Body().Equal(r.Body) } }
// New Prepares and returns a new test framework based on the api // is useful when you need to have more than one test framework for the same iris instance // usage: // iris.Get("/mypath", func(ctx *iris.Context){ctx.Write("my body")}) // ... // e := httptest.New(iris.Default, t) // e.GET("/mypath").Expect().Status(iris.StatusOK).Body().Equal("my body") // // You can find example on the https://github.com/kataras/iris/glob/master/context_test.go func New(api *iris.Framework, t *testing.T, setters ...OptionSetter) *httpexpect.Expect { conf := DefaultConfiguration() for _, setter := range setters { setter.Set(conf) } api.Set(iris.OptionDisableBanner(true)) baseURL := "" if !api.Plugins.PreBuildFired() { api.Build() } if !conf.ExplicitURL { baseURL = api.Config.VScheme + api.Config.VHost // if it's still empty then set it to the default server addr if baseURL == "" { baseURL = iris.SchemeHTTP + iris.DefaultServerAddr } } testConfiguration := httpexpect.Config{ BaseURL: baseURL, Client: &http.Client{ Transport: httpexpect.NewFastBinder(api.Router), Jar: httpexpect.NewJar(), }, Reporter: httpexpect.NewAssertReporter(t), } if conf.Debug { testConfiguration.Printers = []httpexpect.Printer{ httpexpect.NewDebugPrinter(t, true), } } return httpexpect.WithConfig(testConfiguration) }