RSpec:描述,上下文,function,场景?
describe
, context
, feature
, scenario
:四者之间有什么区别?我什么时候使用每一个?
上下文是描述的别名,所以在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
不知道这是一个普遍接受的规则,但我觉得这种方法清晰,很容易掌握。