我是Ruby的初学者,这个问题长期困扰着我。
在RSpec文件中,如果我们写Book.should <do something>
,那么should
关键字是什么?它是Book对象的成员吗?它是如何成为Book对象的成员的?或者它是Ruby的一些构造?这是一个功能吗?如果它是一个函数或成员,我在哪里可以找到它的定义?
答案 0 :(得分:11)
加载后,RSpec将a module包含到Kernel
模块中,该模块包含在Ruby已知的所有对象中。因此,它可以使should方法可用于所有对象。因此,should
不是关键字(例如if
,class
或end
),而是普通方法。
请注意,mixin仅在RSpec上下文中可用,因为它在加载或RSpec期间被“修补”。
答案 1 :(得分:3)
我已经回答了类似的问题here。基本上:
我认为霍尔格的回答可以更明确,最初让你感到困惑的是should
打破了大多数方法命名的惯例(没有关于方法描述它的作用,例如)为了使代码作为一个整体读作一种句子。
因此,库不仅仅是创建一组测试,而是试图鼓励您通过类似于人类可读规范的方式来描述您的应用程序。