package test import ( "joybuywork/internal/app" "joybuywork/internal/config" "joybuywork/internal/consts" "joybuywork/internal/repository/dao" "joybuywork/internal/service/queue/producer" "fmt" "os" "path/filepath" ) func init() { configPath, err := findConfigPath() if err != nil { panic(err) } var filePath = config.FilePath{ ConfigName: "config-dev", ConfigType: "yaml", ConfigPath: configPath, } err = config.LoadConfig(filePath) if err != nil { panic(err) } err = app.InitFeiShu() if err != nil { panic(err) } app.InitLogger() err = app.InitDB() if err != nil { panic(err) } // 设置dao的数据库 dao.SetDefault(app.DB.Client) err = app.InitRedis() if err != nil { panic(err) } app.InitSubLock() err = app.InitEtcdCli() if err != nil { return } //kafka err = app.InitKafka() if err != nil { panic(err) } //队列生产者 producer.SetUp() err = app.InitNode() if err != nil { panic(err) } consts.RunTest = true // 固定的奖品数据 err = app.LangDataInit() if err != nil { panic(err) } } // findConfigPath 从当前测试包目录向上查找项目配置目录。 // go test 会把工作目录设为被测包目录,因此不能依赖固定层级或 os.Args。 func findConfigPath() (string, error) { dir, err := os.Getwd() if err != nil { return "", fmt.Errorf("get working directory: %w", err) } for { configPath := filepath.Join(dir, "etc", "config-dev.yaml") if info, statErr := os.Stat(configPath); statErr == nil && !info.IsDir() { return filepath.Dir(configPath), nil } parent := filepath.Dir(dir) if parent == dir { return "", fmt.Errorf("etc/config-dev.yaml not found from %s", dir) } dir = parent } }