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.