Sha256: 94f1ad680297b927b2f1edbdf228317a04063e153dd936568fe5fb1db4afb823
Contents?: true
Size: 1.37 KB
Versions: 43
Compression:
Stored size: 1.37 KB
Contents
## # Knife: Get, set or mock inaccessible variables in a JavaScript closure # ====================================================================== # # Requires [Jasmine](http://jasmine.github.io/) 2+. # # Usage: # # klass = (-> # # privateVariable = 0 # # privateMethod = -> # privateVariable += 1 # # publicMethod = -> # privateMethod() # # add: add # knife: eval(Knife.point) # # )() # # klass.knife.get('privateVariable') => 0 # klass.knife.set('privateCounter', 5) # klass.knife.get('privateCounter') => 5 # spy = klass.knife.mock('privateMethod').and.returnValue("mocked!") # klass.publicMethod() # => 'mocked!' # expect(spy).toHaveBeenCalled() # @Knife = (-> contextBleeder = -> get = (symbol) -> eval(symbol) set = (symbol, value) -> eval("#{symbol} = value") mock = (symbol) -> oldImpl = get(symbol) spy = jasmine.createSpy(symbol, oldImpl) set(symbol, spy) cleaner = -> set(symbol, oldImpl) Knife.cleaners.push(cleaner) spy get: get set: set mock: mock reset = -> cleaner() while cleaner = Knife.cleaners.pop() me = {} me.reset = reset me.cleaners = [] if jasmine? me.point = "(#{contextBleeder.toString()})()" # Jasmine defines afterEach on window afterEach reset else me.point = "undefined" me )()
Version data entries
43 entries across 43 versions & 1 rubygems