приложение собрано каркасом и вшито в бинарник
- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное вшивается через go:embed и раздаётся корневым маршрутом: разметка на неизвестном пути вне корней сервиса, отказ контракта внутри корня - перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов, а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь - шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка входят в гейт, а в Dockerfile появилась ступень приложения
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user