RSpec:描述,上下文,function,场景?

describecontextfeaturescenario :四者之间有什么区别?我什么时候使用每一个?

上下文是描述的别名,所以在function上是等同的。 你可以交换使用它们,唯一的区别是你的spec文件的读取方式(例如testing输出没有区别)。 Rspec的书说:

“我们倾向于使用describe()作为context()事物和context() ”。

我个人喜欢使用describe() ,但我可以看到为什么人们更喜欢context()

function和情景是水豚的一部分,而不是rspec,并且用于验收testing。

function相当于描述/上下文,并且相当于它的示例。

如果您正在使用Capybara编写验收testing,请使用function/场景语法(如果不使用describe / it语法)。

今天早上,在写一些规格的时候,我有同样的问题。 通常,我主要使用describe ,并没有特别考虑这个问题,但是今天上午,我正在处理一个模块的大量情况和不同的规范,所以下一个将阅读这些规范的开发人员很容易理解。 所以我问了谷歌关于这个,我发现这个: rspec描述与上下文 ,其中我觉得很有趣的答案:

根据rspec源代码,“context”只是“describe”的别名方法,意思是这两个方法之间没有function上的区别。 但是,有一个上下文的差异,这将有助于通过使用它们来使testing更易于理解。

“describe”的目的是将一组testing打包为一个function,而“context”则是将一组testing打包在同一个状态下的一个function上。

所以,依靠这个原则,你会写一个像这样的规范:

 # # The feature/behaviour I'm currently testing # describe "item ordering" do # 1st state of the feature/behaviour I'm testing context "without a order param" do ... end # 2nd state of the feature/behaviour I'm testing context "with a given order column" do .. end # Last state of the feature/behaviour I'm testing context "with a given order column + reverse" do .. end end 

不知道这是一个普遍接受的规则,但我觉得这种方法清晰,很容易掌握。