亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

運行 Ginkgo 測試套件(在運行任何規范之前設置之前的套件

運行 Ginkgo 測試套件(在運行任何規范之前設置之前的套件

Go
慕容708150 2021-12-27 16:05:14
我正在使用 Ginkgo(和 Gomega)包進行單元測試 Go(lang) Rest API。我需要使用全局設置,這應該可以通過定義來實現var _ = BeforeSuite(func() {...})然后每個規范(具體<file>_test.go)應該在這個全局設置之后運行。不幸的是,我不能讓這發生......我的套件文件名是handlers_suite_test.go,我的第一個測試規范名稱是cartContentsHandler_test.go. 在我看來,銀杏運行在字母順序使得測試文件cartContentsHandler_test.go運行前 handlers_suite_test.go。我已經log()對這兩個文件進行了一些調用,不幸的是他們只是確認了我的發現......這真是令人不快的情況,因為我根本無法運行我的測試......我需要確保httptest.Server在所有規范之前設置和運行數據庫池連接。您知道如何使suite_test 作為測試規范之前的第一個文件運行嗎?(我已經嘗試將套件文件命名為 as,_suite_test.go但在這種情況下,套件似乎根本沒有執行)。我的handlers_suite_test.go:package handlers_testimport (    "<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.Routervar s *httptest.Servervar serverURL stringfunc 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()})
查看完整描述

2 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

發生的事情是BeforeSuite注冊一個將在測試套件之前執行的函數,并It注冊一個將成為測試套件一部分的測試函數。對Describe和的回調Context立即執行。所以你必須把所有依賴的東西都BeforeSuite放到It.


查看完整回答
反對 回復 2021-12-27
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

為了保證在塊BeforeSuite的本地設置之前運行必要的全局設置Describe,您應該使用BeforeEach:


在您的套房中:


var serverURL string


var _ = BeforeSuite(func() {

    r = router.NewRouter()

    s = httptest.NewServer(r)

    serverURL = s.URL

})

并在測試中:


var _ = Describe("Handlers/CartContentsHandler", func() {

  var url url.URL


  BeforeEach(func() {

    url = serverURL + "/cart-contents"

  })


  It("Makes a GET request", func() {

    # ....

  })

})


查看完整回答
反對 回復 2021-12-27
  • 2 回答
  • 0 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號