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