rspec上下文的作用域常量

rspec上下文的作用域常量,rspec,constants,rspec2,Rspec,Constants,Rspec2,我经常想做 context "empty stack" do SOME_CONSTANT = "value" it "should be empty" do # use SOME_CONSTANT end end context "populated stack" do SOME_CONSTANT = "a different value" it "should have some items" do # use SOME_CONSTANT end en

我经常想做

context "empty stack" do
  SOME_CONSTANT = "value"
  it "should be empty" do
    # use SOME_CONSTANT
  end
end

context "populated stack" do
  SOME_CONSTANT = "a different value"
  it "should have some items" do
    # use SOME_CONSTANT
  end
end

ruby不将常量作用于闭包,因此它们会泄漏。是否有人有技巧来声明作用于上下文的常量?

更改常量的声明:
SOME_CONSTANT=“value”

self::SOME_CONSTANT=“value”


RSpec为遇到的每一组规范(在您的示例中是上下文)创建一个匿名类。在匿名类中声明一个不带self::的常量可以使其在全局范围内可用,并且对所有规范都可见。将常量声明更改为
self::
可确保它仅在匿名类中可见。

使用rspec的时间更长了,我认为更惯用的方法是使用let

context "empty stack" do
  let(:some_constant){ "value" }

  it "should be empty" do
    puts some_constant
  end
end

context "populated stack" do
  let(:some_constant){ "a different value" }

  it "should have some items" do
    puts some_constant
  end
end

我完全建议使用
let
结构。阅读更多关于
let
的信息:我想使用
let
,但它在before块中不可用。事实并非如此。带有
let
的定义可在
before
before(:each)
before(:suite)
中找到。它们只与
before(:all)
before(:all)
精确地说明了我在这里的原因:)一起使用
it
块中的常量do:
self.class::SOME\u常量