go http custom test code example

Example: go custom http request testing

package main

import (
	"bytes"
	"encoding/binary"
	"net/http"
	"net/http/httptest"

	"github.com/sirupsen/logrus"
)

// helper.go
func JSONStrigify(payload string) []byte {
	jsonData := []byte(payload)
	return jsonData
}

// request.go
func HttpTestRequest(handler http.Handler, method, url string, payload []byte) *httptest.ResponseRecorder {

	request := make(chan *http.Request)
	errors := make(chan error)

	if binary.Size(payload) > 0 {
		req, err := http.NewRequest(method, url, bytes.NewBuffer(payload))
		go func() {
			request <- req
			errors <- err
		}()
	} else {
		req, err := http.NewRequest(method, url, nil)
		go func() {
			request <- req
			errors <- err
		}()
	}

	if <-errors != nil {
		logrus.Error(<-errors)
	}

	rr := httptest.NewRecorder()
	handler.ServeHTTP(rr, <-request)

	return rr
}

// main_test.go
func TestCreateAccount(t *testing.T) {

	router := setupRouter()

	res := helper.HttpTestRequest(router, "POST", "/account", helper.JSONStrigify(`{
		"name":"xyz",
		"ic_type":"pqr",
		"ic_number_identity":"[email protected]",
		"account_number":"1234567890",
		"account_name":"1234567890",
		"bank_name":"1234567890",
		"type":"1234567890"
	}`))

	assert.Equal(t, http.StatusOK, res.Code)
}

Tags:

Go Example