Скользящие константы в контексте rspec
Я часто хочу сделать
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 не ограничивает видимость для закрытий, поэтому они просачиваются. Кто-нибудь имеет трюк для объявления констант, охваченных контекстом?
Ответы
Ответ 1
Измените объявление константы:
от SOME_CONSTANT = "value"
до self::SOME_CONSTANT = "value"
RSpec создает анонимный класс для каждого набора спецификаций (контекст в вашем примере), с которым он сталкивается. Объявление константы без self::
в анонимном классе делает ее доступной в глобальной области видимости и видимой для всех спецификаций. Изменение объявления константы на self::
гарантирует, что оно видимо только внутри анонимного класса.
Ответ 2
Используя 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