beautiful-lies

Test doubles for asynchronous JavaScript that are easy on the eyes.

Beautiful Lies

Mocks for asynchronous JavaScript that are easy on the eyes. Yay! Hooray! Fnuff.

var beautiful = require('beautiful-lies')
    beautiful.lie()
 
var db = {}
db.lie({
  function_name: 'connect',
  on_promise_done: {
    function_name: 'query',
    promise_fail_value: {
      message: 'The query timed out.'
    }
  }
})
db.connect().done(function() {
  db.query().fail(function(error) {
    console.log(error.message) // <-- Will output 'The query timed out.' 
  })
})

Liars are generated using a simple, hierarchial JSON-based DSL, that has three basic types of building specifications: expectations, results and callbacks.

{
  function_name: 'collection',
  arguments: [ 'members' ],
  checkfunction() { return true },
  returns: /* RESULT SPEC GOES HERE */
  run_functionfunction() {
    // anything you want here. 
  }
  run_callback: /* ARRAY OF CALLBACK SPECS GOES HERE */
  run_callback_flow: /* ARRAY OF CALLBACK SPECS GOES HERE*/
}
{
  self: false
  value: { someProperty: 5 }
  on_value: /* ARRAY OF EXPECTATION SPECS GOES HERE */
},
{
  property_xxxx: /* RESULT SPEC GOES HERE */,
  argument_1: /* RESULT SPEC GOES HERE */,
  argument_2: /* RESULT SPEC GOES HERE*/,
  of: {
    function_name: 'addEventListener'
    arguments: [ 'click' ]
  },
  delay: 1000
}

Expectations, results and callback object are buildings blocks that can be used to construct macros (on_promise_done is a plugin, for instance). Check out the built-in macros here, for inspiration: https://github.com/mpj/beautiful-lies/blob/master/src/macros.coffee