当前位置: 首页 > 面试题库 >

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

孟品
2023-03-14
问题内容

我正在使用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但是在这种情况下,看起来套件甚至根本没有执行)。

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



 类似资料:
  • 我在看一个例子,从沃尔的春靴在行动书。它是一个用Groovy编写的简单web应用程序。该项目使用Spring CLI构建、运行和测试,不使用gradle构建文件,并使用grabs.groovy文件提供H2和Thymeleaf依赖项。有两个测试班。第一个是JUnit测试,第二个是Spock规范。JUnit测试文件是: 我不擅长编写Spock测试,所以我不确定问题是什么。

  • 我有以下ant目标: 当我尝试从命令行运行它时,我得到以下输出: 测试在Eclipse Mars(4.5.2)中成功运行。有人知道为什么会发生这种情况,以及我如何让JUnit测试通过ant运行吗?我正在使用JUnit 4.11,并尝试了ant v1.9.3和v1.9.6(以上输出是从ant v1.9.6生成的)。 编辑 根据注释中的建议,我还使用Antv1.8.4进行了测试,但这对导致的崩溃没有任

  • 请让我知道是否可以通过TestNG运行并行套件?

  • 我试图使用XML和TestNG运行一个测试套件,但是我总是同时使用Eclipse和命令行得到相同的消息: 该文件已正确读取,但测试似乎没有运行。 以下是我的testng.xml的内容: 这是我的目录结构在Eclipse中的样子: 此外,这也是我试图通过命令行运行测试套件的方式: 我尝试过通过eclipse清理项目,但似乎没有帮助。我也试过跑步: < code>mvn clean,但它也没有完成工作

  • 我最近发现了命令来自动碰撞包版本号并提交更改。这是一个神奇的小发现。 有没有可能在撞击前进行测试 我在google或堆栈搜索“npm version......”中找不到任何东西匹配了太多不相关的结果。并且没有关于文档npm-version中测试的信息 在这个发现之前,我一直在乞求编写一个脚本。为了测试,碰撞版本,然后git提交。 我用的是karma,package.json包含 在测试npm版本