1

我使用 Ginkgo/Gomega 在 Go 中编写了一些测试,但无论我做什么,ghttp都会向我的客户返回 500 状态,没有内容。这是一些示例代码:

var _ = Describe("Client", func() {

    var (
        server *ghttp.Server
    )

    BeforeEach(func() {
        server = ghttp.NewServer()
        server.AllowUnhandledRequests = false
        server.Writer = GinkgoWriter
    })

    AfterEach(func() {
        server.Close()
    })

    Describe("fetching a node list", func() {

        BeforeEach(func() {

            server.AppendHandlers(
                ghttp.CombineHandlers(
                    ghttp.VerifyRequest("GET", "/nodes"),
                    ghttp.RespondWith(204, ""),
                ),
            )
        })

        It("should be able to fetch a node list", func() {
            response, err := myclient.Get(NODES)
            Ω(err).ShouldNot(HaveOccurred())
            Ω(response).ShouldNot(BeNil(), "No response was returned from nodes.")

            data, err := httputil.DumpResponse(response, true)
            Ω(err).ShouldNot(HaveOccurred())
            GinkgoWriter.Write(data)

            Ω(response.StatusCode).Should(Equal(204))
        })

    })

})

根据 Gomega 变更日志

如果已注册的处理程序做出失败的断言,ghttp 将返回 500。

如果注册的处理程序发生恐慌,ghttp 将返回 500 并且测试失败。

但是,即使我发布到不同的路线,删除附加处理程序调用等,我也不能让这些测试失败。任何建议都将不胜感激!

4

1 回答 1

0

希望OP能弄清楚,因为这对游戏来说已经很晚了。我有同样的问题,所以分享给遇到它的其他人。

就我而言,我的It函数在Context函数之外,但在编译时不会出现任何错误。在嵌套的描述里面你想要一个结构,比如:

Describe
  Context
    BeforeEach
    It

注意 BeforeEach 和 It 包含在上下文中的位置。

希望这可以帮助某人。

于 2020-02-24T14:05:57.553 回答