Хотел бы включить константы из модуля в примеры RSpe c.
Этот вопрос ищет способ разрешить безусловную ссылку на константы из модуля в примерах rspe c 3.9. Это в основном для экономии места и набора текста.
module MyConsts
FOO = "foo"
end
RSpec.describe "Tests Module Constants" do
it 'has unqualified access to constants.' do
expect(FOO).to eq("foo")
end
end
Подходы, которые не работают:
Это удобный способ включить вспомогательные функции из модуля , но это не то же самое, что использование include для класса, поскольку константы не доступны должным образом.
module MyConsts
FOO = "foo"
end
RSpec.configure do |c|
c.include MyConsts
end
RSpec.describe "Tests Module Constants" do
it 'has qualified access to constants.' do
expect(MyConsts::FOO).to eq("foo")
end
it 'has unqualified access to constants.' do
expect(FOO).to eq("foo")
end
end
Пример неквалифицированного доступа завершается неудачно. Было бы неплохо иметь возможность смешивать константы из модуля, чтобы такие примеры проходили.
Failures:
1) Tests Module Constants has unqualified access to constants.
Failure/Error: expect(FOO).to eq("foo")
NameError:
uninitialized constant FOO
Использование include в блоке describe
не работает.
From ранее закрытый выпуск rspe c, можно было бы предположить, что использование include в блоке describe
будет работать. Это не так.
module MyConsts
FOO = "foo"
end
RSpec.describe "Tests Module Constants" do
include MyConsts
it 'has unqualified access to constants.' do
expect(FOO).to eq("foo")
end
end
Копирование всех констант не является началом
Этот ответ на очень похожий вопрос предполагает использование shared_context
. Хотя он и дает конечный результат, он потребует дублирования определений констант. Это проблема, поскольку их сотни, модуль констант полностью извлечен из другого проекта, и поддерживать их в актуальном состоянии - слишком много работы.