simplydit

1.0.9 • Public • Published

simplydit

A mocking library with inversion of control principles that simply works.

Install

npm install simplydit

Usage

// expect = chai.expect
describe('my test', () => {
  it('works', done => {

    // simplydit.mock creates an object with some structure
    // its first argument is the name for the mock (useful for debugging errors)
    // and its second argument is the structure of the object to be mocked.
    // simplydit.func is a constant value
    const db = simplydit.mock('db', {
      user: {
        findOne: simplydit.func
      }
    })

    // This is the API used for describing how should the mock react to calls
    // Currently the API is really basic, but it shouldn't be hard to improve on it.
    db.user.findOne
      .expectCallWith({ id: 1 })
      .andReturn(simplydit.promise('Fake user')) // simplydit.promise is just
                                                 // value => new Promise(resolve => resolve(value))

    // This example test assumes that this "Service", when asked to "getUser",
    // internally calls "db.user.findOne()". Let's test it.
    const service = new Service(db)
    service.getUser(1).then(user => {

      // Normal verifications
      expect(user).to.equal('Fake user')

      // Mock verifications, verifies that all calls instrumented took effect
      db.verify()

      done()
    }).catch(done)
  })
  it('call backs', done => {

    // Boilerplate
    const db = simplydit.mock('db', { user: { findOne: simplydit.func } })

    // This findOne method uses callbacks instead of Promises.
    db.user.findOne
      .expectCallWith(simplydit.anything)  // there's currently no support for partial
                                           // descriptions (PRs welcomed)
      .andCallback(1, [null, 'result'])    // "1" is the position (0-based) of the callback
                                           // The array is the arguments to be passed
                                           // This simulates the very common response:
                                           // "err" = null, "res" = something

    // The rest of the example is pretty much equal
  })
})

Notes

This is some very early work on trying to improve on top of sinon, which I've been using to get a similar result, but the way it overwrites values in objects is prone to errors.

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i simplydit

Weekly Downloads

0

Version

1.0.9

License

MIT

Last publish

Collaborators

  • eordano