173 lines
3.5 KiB
JavaScript
173 lines
3.5 KiB
JavaScript
'use strict'
|
|
|
|
var assert = require('assert')
|
|
var stubs = require('./')
|
|
var tess = require('tess')
|
|
|
|
tess('init', function(it) {
|
|
it('is a function', function() {
|
|
assert.equal(typeof stubs, 'function')
|
|
})
|
|
|
|
it('throws without obj || method', function() {
|
|
assert.throws(function() {
|
|
stubs()
|
|
}, /must provide/)
|
|
|
|
assert.throws(function() {
|
|
stubs({})
|
|
}, /must provide/)
|
|
})
|
|
})
|
|
|
|
tess('stubs', function(it) {
|
|
it('stubs a method with a noop', function() {
|
|
var originalCalled = false
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
originalCalled = true
|
|
}
|
|
|
|
stubs(obj, 'method')
|
|
|
|
obj.method()
|
|
|
|
assert(!originalCalled)
|
|
})
|
|
|
|
it('accepts an override', function() {
|
|
var originalCalled = false
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
originalCalled = true
|
|
}
|
|
|
|
var replacementCalled = false
|
|
stubs(obj, 'method', function() {
|
|
replacementCalled = true
|
|
})
|
|
|
|
obj.method()
|
|
assert(!originalCalled)
|
|
assert(replacementCalled)
|
|
})
|
|
|
|
it('returns value of overridden method call', function() {
|
|
var overriddenUniqueVal = {}
|
|
|
|
var obj = {}
|
|
obj.method = function() {}
|
|
|
|
stubs(obj, 'method', { callthrough: true }, function() {
|
|
return overriddenUniqueVal
|
|
})
|
|
|
|
assert.strictEqual(obj.method(), overriddenUniqueVal)
|
|
})
|
|
|
|
it('calls through to original method', function() {
|
|
var originalCalled = false
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
originalCalled = true
|
|
}
|
|
|
|
var replacementCalled = false
|
|
stubs(obj, 'method', { callthrough: true }, function() {
|
|
replacementCalled = true
|
|
})
|
|
|
|
obj.method()
|
|
assert(originalCalled)
|
|
assert(replacementCalled)
|
|
})
|
|
|
|
it('returns value of original method call', function() {
|
|
var uniqueVal = Date.now()
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
return uniqueVal
|
|
}
|
|
|
|
stubs(obj, 'method', { callthrough: true }, function() {})
|
|
|
|
assert.equal(obj.method(), uniqueVal)
|
|
})
|
|
|
|
it('returns calls override and returns original value', function() {
|
|
var uniqueVal = {}
|
|
var overrideWasCalled = false
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
return uniqueVal
|
|
}
|
|
|
|
stubs(obj, 'method', { callthrough: true }, function() {
|
|
// does not return anything
|
|
overrideWasCalled = true
|
|
})
|
|
|
|
assert.strictEqual(obj.method(), uniqueVal)
|
|
assert.strictEqual(overrideWasCalled, true)
|
|
})
|
|
|
|
it('returns value of overridden method call', function() {
|
|
var uniqueVal = {}
|
|
var overriddenUniqueVal = {}
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
return uniqueVal
|
|
}
|
|
|
|
stubs(obj, 'method', { callthrough: true }, function() {
|
|
return overriddenUniqueVal
|
|
})
|
|
|
|
assert.strictEqual(obj.method(), overriddenUniqueVal)
|
|
})
|
|
|
|
it('stops calling stub after n calls', function() {
|
|
var timesToCall = 5
|
|
var timesCalled = 0
|
|
|
|
var obj = {}
|
|
obj.method = function() {
|
|
assert.equal(timesCalled, timesToCall)
|
|
}
|
|
|
|
stubs(obj, 'method', { calls: timesToCall }, function() {
|
|
timesCalled++
|
|
})
|
|
|
|
obj.method() // 1 (stub)
|
|
obj.method() // 2 (stub)
|
|
obj.method() // 3 (stub)
|
|
obj.method() // 4 (stub)
|
|
obj.method() // 5 (stub)
|
|
obj.method() // 6 (original)
|
|
})
|
|
|
|
it('calls stub in original context of obj', function() {
|
|
var secret = 'brownies'
|
|
|
|
function Class() {
|
|
this.method = function() {}
|
|
this.secret = secret
|
|
}
|
|
|
|
var cl = new Class()
|
|
|
|
stubs(cl, 'method', function() {
|
|
assert.equal(this.secret, secret)
|
|
})
|
|
|
|
cl.method()
|
|
})
|
|
})
|