2012-08-10 70 views
2

下使用Rails 3.2我有一個子目錄控制器(例如/controllers/data_feeds/acme_feed_controller.rb)如何訪問控制器恆定在一個RSpec測試的Rails 3

此控制器具有一些常量如下

class DataFeeds::AcmeFeedController < ApplicationController 

    MY_CONSTANT = "hi 

    def do_something do 
    ... 
    end 

end 

在我的RSpec的控制器的規格(這是/spec/controllers/data_feeds/acme_feed_controller_spec.rb)我想訪問該常數及以下兩種方法我已經試過了(在下面的代碼都註釋掉)

describe AcmeFeedController do 
    if "tests something" do 
    #c = AcmeFeedController.MY_CONSTANT 
    #c = DataFeeds::AcmeFeedController.MY_CONSTANT 
    end 
end 

我顯然不理解規範測試運行的範圍。我需要做什麼以及同樣重要的原因(即範圍發生了什麼)。

感謝您的幫助。

+0

看到你得到的錯誤將是有益的。 – deefour 2012-08-10 19:18:31

回答

10

常量不能用點語法引用,所以DataFeeds::AcmeFeedController.MY_CONSTANT在任何情況下都不會起作用。您需要使用::來引用常量:DataFeeds::AcmeFeedController::MY_CONSTANT

請注意,這是一個紅寶石問題,與RSpec無關。當你遇到這樣的問題時,我建議你在使用普通紅寶石(例如IRB)之前弄清楚如何在RSpec中工作(通常它將是相同的)。

如果你想知道常量是如何工作的,我建議你看this talk,詳細解釋它們。

+0

感謝您的幫助。 (我意識到這對我來說並不適用,但是那是因爲我在嘗試時顛倒了模塊和控制器的名稱,並且錯過了錯別字的錯誤。) – hershey 2012-08-10 19:45:34

0

另外,您可以在不重複控制器類名稱空間的情況下執行此操作。

describe AcmeFeedController do 
    if "tests something" do 
    c = controller.class.const_get('MY_CONSTANT') 
    end 
end 

這種伎倆可能無法在應用程序代碼的批准,但在測試中,它可能是。

相關問題