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常量