- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное вшивается через go:embed и раздаётся корневым маршрутом: разметка на неизвестном пути вне корней сервиса, отказ контракта внутри корня - перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов, а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь - шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка входят в гейт, а в Dockerfile появилась ступень приложения
47 lines
2.3 KiB
Go
47 lines
2.3 KiB
Go
package web
|
|
|
|
import (
|
|
"io/fs"
|
|
"testing"
|
|
)
|
|
|
|
// Стык вшивания с раздачей проверяется здесь, и только здесь: проверки самой
|
|
// раздачи получают файловую систему параметром и подставляют свою, поэтому
|
|
// расхождение объявленной раскладки с настоящей им недоступно по построению.
|
|
//
|
|
// Раскладка объявлена дважды — выходным каталогом сборщика и `distDir` здесь, —
|
|
// и связаны они только совпадением строк. Разойдясь, они дают `503` на каждом
|
|
// пути показа при зелёном наборе проверок.
|
|
func TestDistMatchesEmbeddedLayout(t *testing.T) {
|
|
dist, built := Dist()
|
|
|
|
if dist == nil {
|
|
t.Fatal("вшитое поддерево недоступно: distDir разошёлся с директивой go:embed")
|
|
}
|
|
|
|
_, err := fs.Stat(dist, "index.html")
|
|
|
|
// Оба исхода законны и различаются одним: собрано приложение или нет.
|
|
// Незаконно третье — «собрано, но `Dist` этого не видит».
|
|
if built && err != nil {
|
|
t.Fatalf("приложение объявлено собранным, а разметки в поддереве нет: %v", err)
|
|
}
|
|
|
|
if !built && err == nil {
|
|
t.Fatal("разметка есть, а приложение объявлено несобранным")
|
|
}
|
|
|
|
if !built {
|
|
t.Skip("приложение не собрано: прогон без шага сборки, проверять нечего")
|
|
}
|
|
}
|
|
|
|
// Метка пустого каталога вшивается вместе с прочим: без неё каталога не было бы
|
|
// в git, и сборка Go отказывала бы у всякого, кто приложение ни разу не собирал.
|
|
// Приставка `all:` заведена ровно ради неё.
|
|
func TestMarkerIsEmbedded(t *testing.T) {
|
|
if _, err := fs.Stat(embedded, "embed/.gitkeep"); err != nil {
|
|
t.Fatalf("метка пустого каталога не вшита: %v", err)
|
|
}
|
|
}
|