1.0.9 • Published 10 years ago

simplydit v1.0.9

Weekly downloads
3
License
MIT
Repository
github
Last release
10 years ago

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

1.0.9

10 years ago

1.0.8

10 years ago

1.0.7

10 years ago

1.0.6

10 years ago

1.0.5

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago