运行Ginkgo测试套件(在运行任何规范之前安装BeSuiteSuite)

我正在使用Ginkgo(和Gomega)软件包对单元测试Go(lang)Rest API进行测试。

我需要使用全局设置,这可以通过定义来实现

var _ = BeforeSuite(func() {...})

然后,每个规范(具体<file>_test.go)都应在此全局设置之后运行。不幸的是我无法做到这一点…

我的套件文件名为handlers_suite_test.go,第一个测试规范名称为cartContentsHandler_test.go。在我看来,Ginkgo以字母顺序运行测试文件,从而使该文件可以在

*handlers_suite_test.go``log()

这真是令人不愉快的情况,因为我根本无法运行测试。我需要确保httptest.Server在所有规范之前都已建立并运行了数据库池连接和数据库池连接。

(我已经尝试将套件文件命名为,_suite_test.go但是在这种情况下,看起来套件甚至根本没有执行)。

我的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()

})

我的cartContensHandler_test.go

包handlers_test

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

})

})

})

})

根目录中时,我以这种方式运行测试:

ginkgo handlers -cover --v

回答:

发生的事情是BeforeSuite注册了将在测试套件之前执行的功能,并It注册了将成为测试套件一部分的测试功能。到回调DescribeContext将立即执行。因此,您必须将所有依赖项BeforeSuite放入It

以上是 运行Ginkgo测试套件(在运行任何规范之前安装BeSuiteSuite) 的全部内容, 来源链接: utcz.com/qa/417360.html

回到顶部