ruby - Specs not running as "sandbox" creating dynamic Classes -
i have module define method creates class dynamically this:
require "active_support/all" class somebaseclass # code end module mymodule def self.define(_class_name) class_name = _class_name.classify object.const_set(class_name, class.new(somebaseclass)) end end then, if do: mymodule.define(:my_class) get: myclass
my spec:
describe "#define" "creates dynamic class" mymodule.define("my_class") expect(subject.const_defined?("myclass")).to be_truthy end end this works beautifully... but! when create new spec defining myclass warning: warning: initialized constant myclass
this happening because i've been created myclass in previous spec. so, question is: how can avoid this? want "a fresh start" on each spec.
update: solution based on @giglemad answer...
before object.send(:remove_const, :myclass) if object.const_defined?("myclass") end describe "#define" "creates dynamic class" mymodule.define("my_class") expect(subject.const_defined?("myclass")).to be_truthy end end
you define different class name every time based on name + convention. use timestamps so.
def nano_timestamp_string time.now.to_f.to_s.sub('.','') end you can pretty reuse convention time need unique still want write tests same way. use unique emails instance. if still want def , undef constant same name might want use
object.send(:remove_const,:myconst)
Comments
Post a Comment