2016-05-02 5 views
3

Я тестирование HTTP пользовательского конечной точки для beegoBeego - конечная точка тестирования

package test 

import (
    "github.com/astaxie/beego" 
    . "github.com/smartystreets/goconvey/convey" 
    _ "golife-api-cons/routers" 
    "net/http" 
    "net/http/httptest" 
    "path/filepath" 
    "runtime" 
    "testing" 
) 

func init() { 
    _, file, _, _ := runtime.Caller(1) 
    apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator)))) 
    beego.TestBeegoInit(apppath) 
} 

// TestGet is a sample to run an endpoint test 
func TestGet(t *testing.T) { 
    r, _ := http.NewRequest("GET", "/my/endpoint/fetches/data", nil) 
    w := httptest.NewRecorder() 
    beego.BeeApp.Handlers.ServeHTTP(w, r) 

    beego.Trace("testing", "TestGet", "Code[%d]\n%s", w.Code, w.Body.String()) 

    Convey("Subject: Test Station Endpoint\n", t, func() { 
     Convey("Status Code Should Be 200", func() { 
      So(w.Code, ShouldEqual, 200) 
     }) 
     Convey("The Result Should Not Be Empty", func() { 
      So(w.Body.Len(), ShouldBeGreaterThan, 0) 
     }) 
    }) 
} 

Когда я бегу с помощью go test -v,

я получаю в ответ dial tcp :0: getsockopt: connection refused

Я использую MariaDB работает на моем местном, Я проверил с помощью netstat -tulpn, что моя база данных работает отлично (я получаю действительный ответ, если я использую почтальон и мой сервер работает)

Одно странное наблюдение, после включения линии _ "golife-api-cons/routers" я получаю эту ошибку еще до того, являются тестовыми в выбежала

Мой тест проходит с ответом 200 OK, но без каких-либо данных, как я получаю в ответ Вышеупомянутый ошибку

EDIT

путь по умолчанию, используемый TestBeegoInit функцией используемого /path/to/my/project/test , которая не является искомым путь, поэтому я попытался дать абсолютный путь тоже, до сих пор я не могу подключиться DB.

+0

Какие настройки используют ваше приложение? Вы говорите, что ваш db работает, но как ваш тест знает, к чему подключиться db? – dusual

+0

@dusual - Какие-либо конкретные настройки вам нужны? Проверьте, как beego.TestBeegoInit (<путь/to/config/file>) в источнике – poorva

ответ

1

Вы инициализируете вашего приложение

apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator)))) 
    beego.TestBeegoInit(apppath) 
} 

Где file находится файл абонент.

TestBeegoInit является:

func TestBeegoInit(ap string) { 
    os.Setenv("BEEGO_RUNMODE", "test") 
    appConfigPath = filepath.Join(ap, "conf", "app.conf") 
    os.Chdir(ap) 
    initBeforeHTTPRun() 
} 

, следовательно, место, где ваши тесты ищут конфигурации

<this_file>/../conf/app.conf 

, который в основном является файл конфигурационный по умолчанию.

В принципе, вы не можете подключиться к базе данных. Возможно, потому, что вы также неосознанно подключаетесь к своей базе данных по умолчанию для тестов. Я подозреваю, что это не то, что вы пытаетесь сделать.

+0

Извините, я забыл упомянуть, что я уже пробовал это Не помогает Пожалуйста, обратитесь к этой [link] (http: // stackoverflow .com/вопросы/27943563/How-To-Make-API-тест-файлов-с-beego) – poorva

1

После долгих попыток я узнал, что beego инициализирует переменную, как AppPath в beego/conf.go как -

AppPath, _ = filepath.Abs(filepath.Dir(os.Args[0])) 

когда вы запускаете тесты запускать их с go test -v

но в результате os.Args[0] является текстовым исполняемым файлом, который будет /tmp/path/to/test, а не путь/в/приложение/exe

поэтому в результате он не находит config/app.conf, который находится в вашем пути к приложению, у которого есть данные о соединении db. Ответственная строка в beego/conf.идти -

appConfigPath = filepath.Join(AppPath, "conf", "app.conf") 

Все это происходит в init функции beego, когда вы говорите

import (
    "github.com/astaxie/beego" 
    _ "path/to/routers" 
) 

Hack для этого -

создать новый пакет/файл с функцией инициализации, которая выглядит имеет -

package common 

import (
    "os" 
    "strings" 
) 

func init() { 
    cwd := os.Getenv("PWD") 
    rootDir := strings.Split(cwd, "tests/") 
    os.Args[0] = rootDir[0] // path to you dir 
} 

здесь вы меняете os.Args[0] и назначая ваш путь к каталогу

убедитесь, что вы импортировать его перед beego, так что теперь импорт будет выглядеть

import (
    _ "path/to/common" 
    "github.com/astaxie/beego" 
    _ "path/to/routers" 
) 

И, наконец, вы подключаетесь к БД!

Смежные вопросы