RSpec的pending用例

207 阅读2分钟

当我们以BDD的方式来开发的时候,我们会遵循Red Green Refactor的循环来开发功能。

我们会一开始编写很多spec group,但是,我们会一个个的去实现每个spec。这时候,一开始添加的spec就需要借助RSpec的pending功能将未实现的spec标记失败,但又不影响已实现的spec group的执行结果。

从description开始

定义spec时候,对于尚未实现的,只需添加描述皆可,如:

it 'is light in color' 
it​ ​'is cooler than 200 degrees Fahrenheit' 

上述spec没有实现。运行时,未实现的spec会以星号(*)表示,如:

从输出结果可以看到,未实现的spec运行时会被划归未pending分类下,并显示的告知 Not yet implemented。

标记半成品

对于部分实现的spec,可以在block内添加pending函数,pending函数前的部分还是会被RSpec执行并输出成功还是失败的,pending后的部分也会运行,但结果不会影响整个测试执行的结果。pending函数可以添加在block中的任何位置,如:

执行rspec命令后:

上述的rspec的运行结果可以看出,pending spec的运行结果虽然是失败的,但是并未统计在最终的测试执行结果里。pending spec在最终的测试结果里被标记为星号(*)表示尚未完成。

渐进完成

使用pending标记未完成的spec而不是直接注释掉的好处在于,随着pending spec中涉及的功能的实现,pending spec会被标记为失败,并在最终的测试执行结果中展示出来,提醒我们去删除掉pending,同时,表示我们功能开发的进度。

如上述rspec的输出结果中,2个pending spec失败的原因在于涉及的方法未实现(NoSuchMethod),当2个方法均实现后,再运行rspec,结果如下:

可以看到,带有pending的2个spec再次执行后,被标记失败,同时结果反应到了整个的测试执行结果中。当删除2个pending方法后,再次运行,所有的spec执行成功。

skip

如果不想让spec执行,可以用skip函数替换pending函数。也可以在it前标记x,即xit。类似fit,只是xit表示跳过spec的执行,而不是’focus‘它。

Content mainly from 「Effective testing with Rspec 3」by Myron Maston, Ian Dees