我有一個似乎特定於我的測試套件的問題。RSpec測試只有在按順序運行時才能正確運行
我有一個持有恆一些默認設置,像這樣一個模塊:
module MyModule
DEFAULTS = {
pool: 15
}
def self.options
@options ||= DEFAULTS
end
def self.options=(opts)
@options = opts
end
end
module MyModule
class MyClass
def options
MyModule.options
end
def import_options(opts)
MyModule.options = opts
end
end
end
我允許該程序不帶選項或一個用戶可以指定的選項啓動。如果沒有給出選項,我們使用默認值,但如果給出選項,我們將使用它。一個示例測試套件如下所示:
RSpec.describe MyModule::MyClass do
context "with deafults" do
let(:my) { MyModule::MyClass.new }
it 'has a pool of 15' do
expect(my.options[:pool]).to eq 15
end
end
context "imported options" do
let(:my) { MyModule::MyClass.new }
it 'has optional pool size' do
my.import_options(pool: 30)
expect(my.options[:pool]).to eq 30
end
end
end
如果這些測試按順序運行,那麼所有內容都會通過。如果它反向運行(第二次測試首先進行),第一次測試的池大小爲30.
我沒有一個「真實世界」場景,在這種情況下,程序啓動一次,這就是但我想要相應地測試它。有任何想法嗎?
沒錯,我注意到了同樣的事情 - 是否有辦法在測試之間「拆除」常量? – Anthony 2015-02-11 20:14:58
當您再次加載文件時,它們將被重置。 '負載(<路徑到文件>)' – doesterr 2015-02-11 21:51:46