Web App Testing – Persiapan

Pada modul ini kita akan membahas testing untuk web app, seperti routing, handler, database dan lainnya.

Buat folder untuk menyimpan project, pada tutorial digunakan webapp.

Kemudian didalamn webapp, buat folder berikut :

  • templates, untuk menyimpan Go HTML templates.
  • cmd, akan berisi file webapp dan webapi.
  • web didalam folder cmd, untuk menyimpan file webapp.
  • static, akan berisi static file

Project pada modul ini akan digunakan pada pembahasan Testing Web API, jadi kita siapkan dari awal dengan membuat webapp yang fungsional yang dapat digunakan untuk modul Testing Web API.

Berikut struktur direktorinya

webapp
  |-- cmd
  |      |-- web
  |
  |-- static
  |
  |-- templates

Kemudian seperti biasa, lakukan init project.

$ go mod init webapp

Karena web app akan membutuhkan routing, kita akan gunakan third party modul untuk routing, yaitu chi. Install menggunakan perintah berikut pada command prompt.

$ go get -u github.com/go-chi/chi/v5

Kemudian buat file cmd/web/main.go

package main

import (
	"log"
	"net/http"
)

type application struct{}

func main() {
	//setup app config
	app := application{}

	//get app route
	mux := app.routes()

	//start server
	log.Println("Starting server on port 8080...")
	err := http.ListenAndServe(":8080", mux)

	if err != nil {
		log.Fatal(err)
	}

}

Buat file cmd/web/routes.go, gunakan kode berikut

package main

import (
	"net/http"

	"github.com/go-chi/chi/v5"
	"github.com/go-chi/chi/v5/middleware"
)

func (app *application) routes() http.Handler {
	mux := chi.NewRouter()

	//register middleware
	mux.Use(middleware.Recoverer)

	//register routes
	mux.Get("/", app.Home)

	//static assets

	fileServer := http.FileServer(http.Dir("./static"))
	mux.Handle("/static/*", http.StripPrefix("/static/", fileServer))

	return mux
}

Buat file cmd/web/handlers.go, lalu tambahkan kode berikut

package main

import (
	"html/template"
	"net/http"
	"path"
)

var templatePath = "./templates/"

func (app *application) Home(w http.ResponseWriter, r *http.Request) {
	_ = app.render(w, r, "home.page.gohtml", &TemplateData{})
}

type TemplateData struct {
	IP   string
	Data map[string]any
}

func (app *application) render(w http.ResponseWriter, r *http.Request, t string, data *TemplateData) error {
	//parse template
	parsedTemplate, err := template.ParseFiles(path.Join(templatePath, t))
	if err != nil {
		http.Error(w, "bad request", http.StatusBadRequest)
		return err
	}

	//execute template
	err = parsedTemplate.Execute(w, data)
	if err != nil {
		return err
	}
	return nil
}

Kemudian buat file templates/home.page.gohtml, gunakan kode berikut.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
    <title>Home</title>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col">
                <h1 class="mt-3">Home Page</h1>
            </div>
        </div>
    </div>
</body>
</html>

Jika kita jalankan program dengan perintah

$ go run ./cmd/web

Akan tampil log seperti berikut

2022/10/19 18:48:56 Starting server on port 8080...

Jika kita buka browser dan masukan http://localhost:8080, maka akan tampil homepage

Sampai disini persiapan awal untuk tutorial webapp testing sudah selesai. Pada modul berikutnya kita akan mulai membahas testing untuk router.

Sharing is caring:

Leave a Comment