Я испытываю пакеты Ginkgo (и Gomega) для модульного тестирования Go (lang) Rest API.
Мне нужно использовать глобальную настройку, которая должна быть достижима путем определения
var _ = BeforeSuite(func() {...})
Затем каждая спецификация (конкретная <file>_test.go
) должна запускаться после этой глобальной настройки. К сожалению, я не могу этого сделать...
Имя моего файла набора — handlers_suite_test.go
, а имя моей первой тестовой спецификации — cartContentsHandler_test.go
. Мне кажется, что Ginkgo запускает тестовые файлы в алфавитном порядке, заставляя cartContentsHandler_test.go
запускаться перед handlers_suite_test.go
. Я поместил несколько вызовов log()
в оба файла, и, к сожалению, они только подтверждают мои выводы...
Это действительно неприятная ситуация, так как я вообще не могу запустить свои тесты... Мне нужно убедиться, что соединение httptest.Server
и пула БД настроено и работает до всех спецификаций.
Знаете ли вы, что нужно сделать, чтобы файл suite_test запускался в качестве самого первого файла перед спецификациями теста? (я уже пытался назвать файл пакета как _suite_test.go
, но в данном случае он выглядит как набор даже не выполнено вообще).
My handlers_suite_test.go
:
package handlers_test
import (
"<PROJ>/config"
"<PROJ>/lib"
"<PROJ>/router"
"github.com/gorilla/mux"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"log"
"net/http/httptest"
"os"
"testing"
)
var r *mux.Router
var s *httptest.Server
var serverURL string
func TestHandlers(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Caracal Handlers Suite")
}
var _ = BeforeSuite(func() {
r = router.NewRouter()
s = httptest.NewServer(r)
Expect(len(s.URL)).To(BeNumerically(">", 0))
serverURL = s.URL
log.Print("###" + serverURL + "###\n\n") // ==> THIS PRINTS MUCH LATER AFTER log.Print() in cartContentsHandler_test.go
cwd, _ := os.Getwd()
cfg := config.ReadCfg(cwd + "/../config/config.json").DB
lib.DB = lib.InitDB(cfg)
err := lib.DB.Ping()
Expect(err).NotTo(HaveOccurred())
})
var _ = AfterSuite(func() {
// lib.DB.Close() // ==> this was running into Panic...
s.Close()
})
My cartContensHandler_test.go
:
обработчики пакетов_тест
import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"log"
"net/http"
"strings"
)
var _ = Describe("Handlers/CartContentsHandler", func() {
Describe("Retrieves all available cart content types", func() {
Context("No query string parameters", func() {
var rdr *strings.Reader
var req *http.Request
var res *http.Response
var err error
var url = serverURL + "/cart-contents"
log.Print(url)
It("Makes a GET request", func() {
rdr = strings.NewReader("")
req, err = http.NewRequest("GET", url, rdr)
Expect(err).NotTo(HaveOccurred())
})
It("retrieves a response", func() {
res, err = http.DefaultClient.Do(req)
Expect(err).NotTo(HaveOccurred())
})
It("Returns HTTP 200 OK", func() {
Expect(res.StatusCode).To(BeNumerically("==", http.StatusOK)) // ==> NOW THIS RETURNS 404 as request is to URL without server part
})
})
})
})
В корне ‹PROJ> я запускаю тесты следующим образом:
ginkgo handlers -cover --v
It
в cartContensHandler_test.go? - person user1431317   schedule 24.03.2016log.Print()
внутриIt
действительно выводит после печати вBeforeSuite
! Я перенесу код настройки спецификации вIt
и попробую! - person shadyyx   schedule 24.03.2016