cocoon

Mutate getters (that return functions) into mockable/spyable functions.

  • cocoon

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
cocoon
000.1.19 years ago10 years agoMinified + gzip package size for cocoon in KB

Readme


A small utility module for wrapping property getters within functions.
It is useful as a TDD helper for creating mockable/spyable methods on top of another library's methods that are returned via a getter.
Note: This is not a cure-all. Objects could be frozen, etc.

Example

var lib = {}
function foo() {}
lib.__defineGetter__('foo', function () { return foo })

With something like sinon, you can't (at the moment) mock setters.
With cocoon, you can:
var cocoon = require('cocoon')

var c = cocoon
            .spin(lib)
            .wrap('foo')

..

sinon.stub(lib, 'foo') // works

c.restore()

Yay.
However.. if:
var self = {}

function foo() {}
self.__defineGetter__('foo', function () { return foo })
Object.freeze(self)
module.exports = self

..Nope. Not going to happen.