Ginkgo是GO设计的成熟测试框架,以帮助您编写富有表现力的规格。 Ginkgo建立在GO testing
基金会之上,并由Gomega Matcher库补充。 Ginkgo和Gomega一起让您清楚地表达了规格背后的意图:
进口 ( 。 “ github.com/onsi/ginkgo/v2”。 “ github.com/onsi/gomega"...。:) var _ =描述(“在图书馆签出书”,label(“库”),func(){var library *library *libraries.libraryvar books.books.bookvar valjean *user.userbeforeach(func(){library = libraries.newclient()books.books.book {title:“ les miserables”,作者:“ Victor Hugo”, } valjean = user.newuser(“让·瓦尔让”) })(“库有相关书籍”时,func(){each(func(ctx speccontext)){preenge(liblary.store(ctx,book))。 })context(“和书籍可用”,func(){it(“将其借给读者借给读者”,func(ctx speccontext){Expect(valjean.checkout(ctx,库,“ les Morerables”))。 (成功())期望(valjean.books())。to(contanelement(book))期望(library.userwithbook(ctx,book))。 },spectimeout(time.second * 5)) })context(“但是已经签出了这本书”,func(){var javert *uster.userbeforeach(func(ctx speccontext){javert = users.newuser(“ javert”)图书馆,“ Les Miserables”))。到(成功()) })(“告诉用户”,func(ctx speccontext){err:= valjean.Checkout(ctx,库,“ les miserables”)期望(err).to(gatchError(“ gatsError)(“ les miserables当前已签出”) ) },spectimeout(time.second * 5))(“让用户放置并稍后通知”,func(ctx speccontext){期望(valjean.hold(ctx,库,“ les morerables”)。 (成功())期望(valjean.holds(ctx))。到(continelement(book))by(“当javert返回书籍时”)期望(javert.return(ctx,cribrle,book))。 ))(“最终通知Valjean”)通知:=“ Les Miserables已准备好接收”(CTX,Valjean.notifications)。 les miserables'))。到(成功())期望(valjean.books(ctx))。to(contanelement(book))期望(valjean.holds(ctx))。to(beempty()) },spectimeout(time.second * 10)) })) })(“库没有相关书籍”时,func(){it(“告诉读者不可用的读者” les miserables”)期望(err)。 },spectimeout(time.second * 5)) })) }))
跳到文档以了解更多信息。 引导并开始编写您的第一个规格很容易。
如果您有疑问,评论,错误报告,功能请求等。请打开GitHub问题,或访问Ginkgo Slack频道。
是否编写基本单元规格,复杂的集成规格,甚至是性能规范 - 银眼都会为您提供一种表现力的特定域语言(DSL),这些语言(DSL)将对来自Quick,Rspec,Rspec,Jasmine和Busted等框架的用户熟悉。 尽管银杏的实用程序扩展到了接受级测试,但这种测试风格有时被称为“行为驱动的开发”(BDD)(BDD)。
使用Ginkgo的DSL,您可以使用可嵌套的Describe
, Context
和容器节点When
帮助您组织规格。用于设置和清理BeforeEach
和AfterEach
设置节点。 It
并Specify
持有主张的主题节点。套房后要准备和清理的BeforeSuite
和AfterSuite
节点……等等!
在运行时,银杏可以以可重复的随机顺序运行您的规格,并且对规格并行化具有复杂的支持。 实际上,并行运行规格就像
银杏-p
通过遵循已建立的图案以编写并行规格,您甚至可以构建大型,复杂的集成套件,这些套件可以平行并进行性能。 而且,您不必担心自己的规格套件悬挂或在后面留下混乱-Ginkgo提供每个节点context.Context
和在设定的时间后打断规格的能力 - 然后清理。
随着套房的种植,银杏可以帮助您保持标签的规格,并让您轻松地以编程方式或在命令行上运行规格子集。 Ginkgo的报告基础架构以各种格式生成机器可读的输出,并允许您构建自己的自定义报告基础架构。
银杏带有ginkgo
,这是一种命令行工具,该工具支持生成,跑步,过滤和分析Ginkgo套房。 当Ginkgo检测到ginkgo watch
的更改时,您甚至可以自动运行规格,从而在测试驱动的开发过程中可以快速反馈循环。
那只是银杏! Gomega为您的套房带来了一个丰富,成熟的主张和匹配者家族。 使用Gomega,您可以在规格中轻松地将同步和异步主张混合在一起。 您甚至可以通过构成Gomega现有的构建块来快速,轻松地构建自己的一套表达域特异性匹配器。
愉快的测试!
银杏是通过mit许可的
参见贡献