2016-01-20 31 views
0

我對Rspec有點新感覺,並且在出現問題時我正在編寫一些測試示例。在Rspec的鉤子中定義和使用常量

首先,我正在使用全局變量來定義我將在很多測試中使用的三個常量值。例如:

$message = 'this is a test' 

但是,我注意到這個全局被轉移到其他測試文件並導致問題。好吧...然後決定避免使用全局變量,因爲如果我的測試文件數量增長,這可能會在未來造成很大的痛苦。

然後我去了let()塊。例如:

let(:message) { 'this is a test' } 

現在的問題是,這個變量不能在鉤子之前和之後使用。好吧...

我最後一次嘗試使用常量的上下文中/介紹,像這樣:

self::MESSAGE = 'this is a test' 

然而,就像咱們這個不能鉤內使用,因爲它們不是任何類或模塊。

所以,我堅持...

你們怎麼處理呢?我需要爲此創建實例變量嗎?那是我可以使用的其他選擇嗎?

非常感謝。

+0

要清楚的是,'let'值*可以用在'之前(:每個)'和'之後(:每個)'塊中。它們不能用在'before(:all)'塊之前。一般來說,我認爲'before(:all)'塊是代碼異味,所以重構測試只使用'之前(:每個)'塊可以解決這個問題。 –

+0

好的,是的......我仍然在爲我的測試掌握最好的方法,所以我會考慮您的建議!謝謝! –

回答

0

您還有另外一種選擇來定義數據實例變量。

before do 
    @data = [ {one: 1, two: 2}, 
      {one: 2, two: 3} ] 
end 

您可以在before範圍內的所有測試中使用@data。這與設置靜態數據的目的幾乎相同,但它可能更適合您 - 沒有看到您的代碼很難說。

+0

很酷,我想到了實例變量,但不是你把它放在這裏的方式。這看起來確實不錯,我肯定會給它一個鏡頭。謝謝!只有一個問題,但在塊之前有:每個或:all? –