2012-05-23 89 views
10

我是Ruby的初學者,並且很久以前就有這個問題嘮叨我。RSpec Ruby中的關鍵字「應該」究竟是什麼Ruby

在RSpec文件中,如果我們編寫Book.should <do something>should關鍵字是什麼?它是Book對象的成員嗎?它是如何成爲Book對象的成員?或者它是一些Ruby的構造?它是一個函數嗎?我在哪裏可以找到這個定義,如果它是一個函數或成員?

+1

這個問題是http://stackoverflow.com/questions/3105755/ruby-metaprogramming-how-does-rspecs-should-work –

+0

的副本鏈接並沒有解釋它實際上做了什麼。關鍵字「應該」究竟是什麼? – woodstok

+3

+1,用於理解魔法。 –

回答

11

加載後,RSpec將a module包含到Kernel模塊中,該模塊包含在Ruby已知的所有對象中。因此,它可以使所有對象都可以使用該方法。因此,should不是關鍵字(如if,classend),而是一種常規方法。

請注意,mixin僅在RSpec上下文中可用,因爲它在加載或RSpec期間被「修補」。

+0

這就是我一直在尋找的。謝謝 – woodstok

3

我已經回答了類似問題here。基本上:

我認爲Holger的回答可能會更明確一些,最初讓您感到困惑的是should打破了方法命名的大多數常規約定(例如,關於方法的描述沒有描述它的作用)爲了使整個代碼作爲一種句子來閱讀。

因此,圖書館不是僅僅創建一組測試,而是試圖鼓勵您通過測試來描述您的應用程序,其方式類似於人類可讀的規範。

+1

好。內部應該做什麼? – woodstok

+2

創建一個條件爲真的斷言,它將作爲測試的一部分運行。所以它類似於說'assert x == y'。 – Russell