如何在Rails 3下的rspec测试中访问控制器常量

her*_*hey 4 ruby testing rspec ruby-on-rails constants

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

该控制器有一些常数如下

class DataFeeds::AcmeFeedController < ApplicationController

  MY_CONSTANT = "hi

  def do_something do
    ...
  end

end
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)

我显然不了解规范测试的运行范围.我需要做什么,同样重要的原因(即范围内发生了什么).

谢谢你的帮助.

Myr*_*ton 12

常量不能用点语法引用,因此DataFeeds::AcmeFeedController.MY_CONSTANT永远不会在任何上下文中工作.你需要用来::引用常量:DataFeeds::AcmeFeedController::MY_CONSTANT.

请注意,这是一个红宝石问题,与RSpec无关.当你遇到这样的问题时,我建议你弄清楚如何用纯红宝石(例如在IRB中)做这件事,然后再担心它在RSpec中是如何工作的(通常它会是相同的,无论如何).

如果你想知道常量如何在ruby中工作,我建议你观看这个详细解释它们的讲话.