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

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -