Sha256: 994999d27b83eced8770b46eda29780f062fd79d31ff9c9ad2d97e986080c273

Contents?: true

Size: 1.39 KB

Versions: 18

Compression:

Stored size: 1.39 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)
      set(symbol, spy)
      cleaner = -> set(symbol, oldImpl)
      Knife.cleaners.push(cleaner)
      spy

    get: get
    set: set
    mock: mock

  reset = ->
    for cleaner in Knife.cleaners
      cleaner()
    Knife.cleaners = []

  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

18 entries across 18 versions & 1 rubygems

Version Path
upjs-rails-0.9.1 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.9.0 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.8.2 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.8.1 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.8.0 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.8 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.7 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.6 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.5 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.4 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.3 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.2 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.1 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.7.0 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.6.5 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.6.4 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.6.3 spec_app/spec/javascripts/helpers/knife.js.coffee
upjs-rails-0.6.2 spec_app/spec/javascripts/helpers/knife.js.coffee