使用 go:embed 嵌入迁移 SQL 到二进制,移除 runtime.Caller 源码路径依赖, server 和 desktop 发布产物均可在无源码目录环境下完成数据库初始化和迁移。
44 lines
925 B
Go
44 lines
925 B
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"nex/backend/internal/config"
|
|
"nex/backend/internal/database"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestDesktop_InitMigrationsWithoutSourceTree(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
|
|
origDir, err := os.Getwd()
|
|
if err == nil {
|
|
defer func() {
|
|
if chdirErr := os.Chdir(origDir); chdirErr != nil {
|
|
t.Logf("无法恢复工作目录: %v", chdirErr)
|
|
}
|
|
}()
|
|
}
|
|
if chdirErr := os.Chdir(tmpDir); chdirErr != nil {
|
|
t.Skipf("无法切换到临时目录: %v", chdirErr)
|
|
}
|
|
|
|
cfg := &config.DatabaseConfig{
|
|
Driver: "sqlite",
|
|
Path: filepath.Join(tmpDir, "nex-test.db"),
|
|
MaxIdleConns: 5,
|
|
MaxOpenConns: 10,
|
|
ConnMaxLifetime: 0,
|
|
}
|
|
|
|
zapLogger := zap.NewNop()
|
|
db, err := database.Init(cfg, zapLogger)
|
|
if err != nil {
|
|
t.Fatalf("在无源码目录环境下数据库初始化应成功,但返回错误: %v", err)
|
|
}
|
|
database.Close(db)
|
|
}
|