1.0.4 • Published 8 years ago

proxy_stub_tracer v1.0.4

Weekly downloads
3
License
ISC
Repository
github
Last release
8 years ago

Synopsis

A simple utility function which can aid in testing by allowing you to trace and/or stub method calls on an object.

Motivation

When it comes to writing test code, sometimes you need to know if an object, e.g. a database or logger instance has been called by the function under test. Libraries such as Sinon are usefull for spying on single methods, e.g. sinon.spy(object, "method"); however, they fall short when it comes to spying on all methods of an object.

A simple method call tracer:

const obj = {
  property: 10,
  multiply: (x, y) => x * y,
  square: (x) => x * x
};
const tracer = traceMethodCalls({ obj });
tracer.proxy.multiply(1, 2);
tracer.proxy.square(2);
assert.equal(tracer.callCount(), 2);

The proxy maintains the original object's functionality and merely increments a counter before forwarding the method call.

Stubbing an object

Unit testing oftens requires passing mocked and stubbed objects into the constructor. For example an object's constructor may require an object representing a database api and connection; however we would not want to pass a real database connection during testing for a simple unit test. The tracer can block calls and return a void promise instead.

const tracer = traceMethodCalls({ obj, stubMethod:true });
tracer.proxy.multiply(1, 2)
  .then(value => {
    assert.equal(value, undefined);
    assert.equal(tracer.callCount(), 1);
  });

Alternatively you can make the tracer return a rejected promise by passing throws: true -- this can be useful for testing failed api calls, e.g. a database error.

Installation

npm install --save-dev proxy_stub_tracer
import traceMethodCalls from 'proxy_stub_tracer'

Requirements

This utility relies on ES6 proxies. If you are writing NodeJS code, then you will need to use Node 6.0+.

Tests

npm test

Contributors

Djamel Hassaine

License

MIT license

1.0.4

8 years ago

1.0.3

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago