これは私が持っている状況の最小限の一般的な例です:
test / mytest.rb
describe "What I want to test" do
include TestUtils
temporary_change_value(settings, :tmp_setting, value)
describe "test1 blablabla" do
# ...
end
describe "test2 blablabla" do
# ...
end
end
test / support / test_utils.rb
module TestUtils
def self.included(base)
base.class_eval do
extend ClassMethods
before do
MyMainClass.interface = TestInterface.new
MyMainClass.handler.display.clear
end
after do
MyMainClass.handler.display.clear
end
end
end
module ClassMethods
def temporary_change_value(item, key, value)
old_value = nil
before do
old_value = item[key]
item[key] = value
end
after do
item[key] = old_value
end
end
end
end
TestUtils
モジュールはeveyテストファイルに含まれているため、commonタスクbefore
とend
tasksは常に実行されますが、この場合temporary_change_value
、このファイル内のすべてのテストのbeforeブロックとしてメソッドを使用する必要もあります。これは機能していません。/ブロックの1つだけが実行されているようですbefore
(end
具体的には、を設定するブロックMyMainClass.interface
)
私が試したこと
before
このように/end
ブロックの順番を変えてみました。
describe "What I want to test" do
extend TestUtils::ClassMethods
temporary_change_value(settings, :tmp_setting, value)
include TestUtils
describe "test1 blablabla" do
# ...
end
describe "test2 blablabla" do
# ...
end
end
まだ動作していません。現在、settings
値は変更されていないため、実行されるのは2番目のbefore
/end
ブロックのみが含まれているようです。
質問:どうすればこれを達成し、それでも乾いた状態に保つことができますか?