2011-05-25 42 views
3

我只是花了很多年試圖弄清楚爲什麼我的規格是孤立傳遞的,但是當一起運行控制器和lib測試時,一些規格神祕失敗。罪魁禍首是這樣的:使用RSpec,常量是否描述了一個大的禁忌?

在一個規範:

describe SomeThing do 
    CONSTANT_VALUE = "a value" 

    # ... examples etc ... 
end 

而在另一:

describe AnotherThing do 
    CONSTANT_VALUE = "a different value" 

    # ... the rest is history 
end 

我會分配給這些常量我的規格之間的漏水,從而導致意外的行爲的價值觀念。我是否應該使用let塊來定義常量等?或者是其他東西?

+1

我認爲你應該在你的測試中使用let,因爲描述沒有像類,模塊,方法等那樣擁有自己的變量範圍 – xinit 2011-05-25 18:41:38

回答

4

是的,let就是這裏的答案。

+0

謝謝,這是那些可能會出現幾個人的奇怪陷阱之一:)我想知道範圍的東西是一個功能,還是一個限制。 – d11wtq 2011-05-26 03:41:19

+0

如果你不知道,你可以通過將它們聲明爲self :: CONSTANT ='value''實際上將常量範圍限定在describe塊本身。您仍然可以在不使用'self'前綴的情況下訪問它們。使用'let',你可以使用大寫字母的名字,所以它看起來不太清楚恕我直言:) – d11wtq 2011-05-26 16:04:47

相關問題