rspec上下文的范围常量

ops*_*psb 19 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
end
Run Code Online (Sandbox Code Playgroud)

ruby不会将常量范围限制为闭包,因此它们会泄漏出来.有没有人有一个技巧来声明作用于上下文的常量?

小智 22

更改常量的声明:
从.SOME_CONSTANT = "value"
self::SOME_CONSTANT = "value"

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

  • 要在“it”块中使用这些常量,请执行以下操作:“self.class::SOME_CONSTANT” (2认同)

ops*_*psb 21

现在使用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
Run Code Online (Sandbox Code Playgroud)

  • 我完全建议使用`let`结构.在这里阅读更多关于`let`的信息:https://www.relishapp.com/rspec/rspec-core/docs/helper-methods/let-and-let (2认同)