Не знаю о лучшем, но этот , по крайней мере, правильный, если адреса имеют свои комментарии, разделенные и замененные пробелами.
Серьезно. Вы должны использовать уже написанную библиотеку для проверки электронной почты. Лучшим способом, вероятно, является просто отправить электронное письмо с подтверждением на этот адрес.
Не думаю, что это возможно. Мне не удалось найти документацию, в которой это явно указано, но я считаю, что go test
всегда использует каталог пакетов (содержащий исходные исходные файлы) в качестве рабочего каталога.
В качестве обходного пути я скомпилировал тест и выполнил тест из текущего каталога.
go test -c && ./<mypackage>.test
Или, если вы хотите использовать общую команду, которую вы можете использовать, вы можете переименовать тестовый файл с помощью опции -o
.
go test -c -o xyz.test && ./xyz.test
Я бы использовал переменную среды для размещения вашего приложения. Кажется, это лучший способ запускать инструменты go, поскольку тестовые программы можно запускать из временного местоположения.
// get home dir of app, use MYAPPHOME env var if present, else executable dir.
func exeDir() string {
dir, exists := os.LookupEnv("MYAPPHOME")
if exists {
return dir
} else {
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath := path.Dir(ex)
return exPath
}
}
Вы можете использовать Caller для получения пути к текущему исходному исходному файлу, например:
package sample
import (
"testing"
"runtime"
)
func TestGetFilename(t *testing.T) {
_, filename, _, _ := runtime.Caller(0)
fmt.Println("Current test filename: " + filename)
}
Хотя это не очень удобно, вы всегда можете передать его как переменную командной строки, например:
package blah_test
import (
"flag"
"fmt"
"os"
"testing"
)
var (
cwd_arg = flag.String("cwd", "", "set cwd")
)
func init() {
flag.Parse()
if *cwd_arg != "" {
if err := os.Chdir(*cwd_arg); err != nil {
fmt.Println("Chdir error:", err)
}
}
}
func TestBlah(t *testing.T) {
t.Errorf("cwd: %+q", *cwd_arg)
}
Затем запустите его, как:
┌─ oneofone@Oa [/tmp]
└──➜ go test . -cwd="$PWD"
--- FAIL: TestBlah (0.00 seconds)
blah_test.go:16: cwd: "/tmp"
Вы можете использовать пакет os .
Вы хотели бы сделать что-то вроде этого
func TestMyFunction(t *testing.T) {
os.Chdir("./path")
//TEST FUNCTION
os.Chdir("..")
}
В пакете os есть несколько возможностей .
Независимо от того, где находится рабочий каталог. Это должно быть под вашим проектом Dir. Итак, мое решение
wd, _ := os.Getwd()
for !strings.HasSuffix(wd, "<yourProjectDirName>") {
wd = filepath.Dir(wd)
}
raw, err := ioutil.ReadFile(fmt.Sprintf("%s/src/conf/conf.dev.json", wd))
Ваш путь должен всегда начинаться с вашего проекта Dir. Каждый раз, когда вы читаете файл в пакете и получаете доступ по адресу main.go или к вашему другому модулю пакета. Он всегда будет работать.