mockmock
v0.0.7
Published
Mocking library for minimalists and people that don't want to remember 500 different methods.
Readme
mockmock
Mocking library for minimalists and people that don't want to remember 500 different methods.

Why?
I like sinon, but I am not a big fan of forcing users to remember the difference between stubs, spies and mocks. There is no need for a ton of different methods. mockmock is a much simpler approach that offers a sufficient solution for the majority of use-cases.
Example
mockmock exports a single function mock.
mock accepts the function to be mocked or a constant value to be returned:
var mocked = mock(function (color, fruit) {
console.log('A', color, fruit)
})
mocked('red', 'apple') // #=> A red apple
mocked('yellow', 'banana') // #=> A yellow banana
mocked('green', 'cucumber') // #=> A green cucumbervar mocked = mock(123)
console.log(mocked()) // #=> 123Apart from defining behavior, the mock function is also a "spy", which means you can access its arguments, thisArg etc.:
var mocked = mock()
mocked(1, 2, 3)
console.log(mocked.args) // #=> [[1, 2, 3]]
mocked(4, 5, 6)
console.log(mocked.args) // #=> [[1, 2, 3], [4, 5, 6]]
mocked.apply({}, [])
console.log(mocked.thisValues) // #=> [this, this, {}]Install
With npm do:
npm i mockmock -Smockmock can then be required as follows:
var mock = require('mockmock')or:
var mock = require('mockmock').mockAPI
If you are familiar with sinon, a lot of the methods might look familiar to you.
mock() #=> mockedFn
Either accepts a constant value to be returned using an identity function or a function to be mocked. If no argument is provided, a noop function will be used.
var mockedIdentityFn = mock('123')
console.log(mockedIdentityFn()) // #=> '123'
var mockedFn = mock(function () {
return 'hello'
})
console.log(mockedFn()) // #=> 'hello'
var mockedNoop = mocke()
console.log(mockedNoop()) // #=> undefinedargs
An array of recorded arguments. arguments will be converted to an actual array to allow easy usage of deepEqual methods.
var mocked = mock(function () {})
mocked(1, 2, 3)
mocked(4, 5, 6)
console.log(mocked.args) // #=> [[1, 2, 3], [4, 5, 6]]thisValues
Similar to args, records the thisValue the mocked function has been called with.
var mocked = mock(function () {})
mocked.call({ a: 'a' })
mocked.call({ b: 'b' })
console.log(mocked.thisValues) // #=> [{ a: 'a' }, { b: 'b' }]returnValues
Similar to args, records the return values of the mocked function.
var i = 0
var mocked = mock(function () {
return i++
})
mocked()
mocked()
mocked()
console.log(mocked.returnValues) // #=> [0, 1, 2]calls
Keeps track of when (unix timestamp) the mocked function has been called.
var mocked = mock()
mocked()
mocked()
mocked()
console.log(mocked.calls) // #=> [1445386361361, 1445386361365, 1445386361369]errors
Records the errors thrown by the function that has been mocked. Note that thrown errors will be passed through the mock function.
var error = new Error()
var mocked = mock(function () { throws error })
try { mocked() } catch (e) {}
console.log(mocked.errors) // #=> [error]callCount
How many times has the mocked function been called?
var mocked = mock()
mocked()
mocked()
mocked()
console.log(mocked.callCount) // #=> 3called
If the mocked function has been called at all.
var mocked = mock()
console.log(mocked.called) // #=> false
mocked()
console.log(mocked.called) // #=> truecalledOnce
calledTwice
calledThrice
If the mocked function has been called exactly once, twice or three times.
var mocked = mock()
console.log(mocked.calledOnce) // #=> false
mocked()
console.log(mocked.calledOnce) // #=> true
mocked()
console.log(mocked.calledOnce) // #=> false
console.log(mocked.calledTwice) // #=> truefirstCall
secondCall
thirdCall
lastCall
Returns an object describing the first, second, third or last call.
var mocked = mock('hello world')
mocked(1, 2, 3)
console.log(mocked.firstCall) // #=> { thisValue: this, args: [1, 2, 3], returnValue: 'hello world', error: undefined }clear, flush, reset
Resets the internal spy. All recorded arguments, errors, return values etc. will be reset.
var mocked = mock()
mocked()
console.log(mocked.called) // #=> true
mocked.clear()
console.log(mocked.called) // #=> falsemockFn
The function that is being mocked. Identity function of the passed in value when a constant value has been supplied.
var fn = function () {}
var mocked = mock(fn)
console.log(mocked.mockFn, fn) // #=> truemockValue
Equivalent of mockFn for mocked identities. References the supplied constant value (if any).
var c = 123
var mocked = mock(c)
console.log(mocked.mockValue, c) // #=> trueFor more usage examples, have a look at the test suite.
Credits
- "Curious Chicken" image by Ian Southwell, licensed under CC BY-NC-ND 2.0
License
ISC
