Pending 态规格
您可以将单个Spec
或容器标记为待定。这将阻止Spec
(或者容器中的Specs
)运行。您可以在您的Describe
, Context
, It
和 Measure
前面添加一个P
或者一个X
来实现这一点:PDescribe("some behavior", func() { ... })
PContext("some scenario", func() { ... })
PIt("some assertion")
PMeasure("some measurement")
XDescribe("some behavior", func() { ... })
XContext("some scenario", func() { ... })
XIt("some assertion")
XMeasure("some measurement")
当您标记一个It
或者Meature
为Pending
态时,您不必删掉fun() {...}
。 Ginkgo 会自动忽略字符串后面的任何参数。
默认,Ginkgo将会打出每一个处于Pending
态的Spec
的说明。您可以通过设置--noisyPendings=false
标签来关闭它。
默认,Ginkgo不会因为有处于Pending
态的规格而导致失败。您可以通过设置--failOnPending
标签来改变它。
在编译时,使用P
和X
将规格标记为Pending
态。如果您需要在运行时(可能是由于只能在运行时才知道约束)跳过一个规格。您可以在您的测试中调用Skip
:
It("should do something, if it can", func() {
if !someCondition {
Skip("special condition wasn't met")
}
// assertions go here
})
默认地,Ginkgo将会为每一个跳过的规格打印输出一份说明。您可以通过设置--noisySkippings=false
标签来关闭它。
注意:Skip(...)
导致闭包退出,所以没有必要返回它。
重点规格
当开发的时候,运行规格的子集将会非常方便。Ginkgo有两种机制可以让您专注于特定规格:
1,您可以在Descirbe
, Context
和 It
前面添加F以编程方式专注于单个规格或者整个容器的规格:
FDescribe("some behavior", func() { ... })
FContext("some scenario", func() { ... })
FIt("some assertion", func() { ... })
这样做是为了指示Ginkgo只运行这些规格。要运行所有规格,您需要退回去并删除所有的F。
2,您可以使用--focus = REGEXP
和/或--skip = REGEXP
标签来传递正则表达式。Ginkgo只运行 focus
正则表达式匹配的规格,不运行skip
正则表达式匹配的规格。
3,为了防止规格不能在测试组之间提供足够的等级区分,可以通过--regexScansFilePath
选项,将目录加载到focus
和skip
的匹配中。也就是说,如果测试的初始代码位置是test/a/b/c/my_test.go
,可以将--focus=/b/
和--regexScansFilePath=true
结合起来,专注于包含路径/b/
的测试。此功能对于在创建这些测试的原始目录的行中过滤二进制工件中的测试是十分有用的。但理想情况下,您应该遵循最大限度地减少使用此功能的需求来组织您的规格。
当Ginkgo检测到以编程式为测试中心的测试组件时,它将以非零状态码退出。这有助于检测CI系统上错误提交的重点测试。当传入命令行focus
/skip
标志时,Ginkgo以0
状态码退出。如果要将测试集中在CI系统上,则应该显示地传入-focus
或-skip
标志。
嵌套的以编程方式为重点的规格遵循一个简单的规则:如果叶子节点被标记为重点,那么它的被标记为重点的任何根结点将变为非重点。根据这个规则,标记为重点的兄弟叶子节点(无论相对深度如何),将会运行无论共享的根结点是否是重点;非重点的兄弟节点将不会运行无论共享的根结点或者相对深度的兄弟姐妹是否是重点。更简单地:
FDescribe("outer describe", func() {
It("A", func() { ... })
It("B", func() { ... })
})
将会运行所有的It
,但是:
FDescribe("outer describe", func() {
It("A", func() { ... })
FIt("B", func() { ... })
})
只会运行B
,这种行为倾向于更紧密地反应开发人员在测试套件上进行迭代时的实际意图。
程序化方法和--focus=REGEXP
/--skip=REGEXP
方法是互斥的。使用命令行标志将覆盖程序化的重点。
专注于没有It
或者Measure
的叶子节点的容器是没有意义的。由于容器中没有任何东西可以运行,因此实际上,Ginkgo忽略了它。
使用命令行标志时,您可以指定--focus
和--skip
中的一个或两个。如果都指定了,则他们的限制将都会生效。
您可以通过运行ginkgo unfocus
来取消以编程为中心的测试的关注。这将从您当前目录中可能具有任何FDescribe
,FContext
和FIt
的测试中删除F
。
如果你想跳过整个包(当使用-r
标志递归运行ginkgo
时),你可以将逗号分隔的列表传递给--skipPackage = PACKAGES, TO, SKIP
。包含列表中目录的任何包都将会被忽略。