簡體   English   中英

如何在Rails 3下的rspec測試中訪問控制器常量

[英]How to access a controller constant in an rspec test under Rails 3

使用Rails 3.2我在子目錄中有一個控制器(例如/controllers/data_feeds/acme_feed_controller.rb)

該控制器有一些常數如下

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

我顯然不了解規范測試的運行范圍。 我需要做什么,同樣重要的原因(即范圍內發生了什么)。

謝謝你的幫助。

常量不能用點語法引用,因此DataFeeds::AcmeFeedController.MY_CONSTANT永遠不會在任何上下文中工作。 您需要使用::來引用常量: DataFeeds::AcmeFeedController::MY_CONSTANT

請注意,這是一個紅寶石問題,與RSpec無關。 當你遇到這樣的問題時,我建議你弄清楚如何用純紅寶石(例如在IRB中)做這件事,然后再擔心它在RSpec中是如何工作的(通常它會是相同的,無論如何)。

如果你想知道常量如何在ruby中工作,我建議你觀看這個詳細解釋它們的講話

此外,您可以執行此操作而無需重復控制器類名稱空間。

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

這種技巧可能不會在應用程序代碼中得到批准,但在測試中可能會被批准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM