decorator-wrap
Version:
A decorator (@wrap) for wrapping class or methods with your custom code
121 lines (106 loc) • 2.77 kB
JavaScript
var assert = require("assert");
var wrap = require('../dist/index.min.js').wrap;
describe('Wrap', function() {
it('should wrap a class', function (done) {
var log = (callback, args, name, type) => {
console.log('Starting ', type, name);
var result = callback();
console.log('Ended: ', name);
done();
return result;
};
(log)
class SuperNiceClass {
constructor(){
//some business here....
console.log('hello from class');
//some business here....
}
bar(a,b) {
//some business here....
console.log('hello from bar method');
//some business here....
}
}
new SuperNiceClass();
});
it('should wrap a method inside a class', function (done) {
var log = (callback, args, name, type) => {
console.log('Starting ', type, name);
var result = callback();
console.log('Ended: ', name);
done();
return result;
};
class SuperNiceClass {
constructor(){
//some business here....
console.log('hello from class');
//some business here....
}
(log)
bar(a,b) {
}
}
new SuperNiceClass().bar(1,2);
});
it('should change input arguments inside a method', function () {
var add5ToInput = (callback, args, name, type) => {
args[0] += 5;
var result = callback();
return result;
};
class SuperNiceClass {
constructor(){
this.result = 0;
}
(add5ToInput)
add(a) {
this.result += a;
}
}
let instance = new SuperNiceClass();
instance.add(10);
assert.equal(instance.result, 15);
});
it('should change output from a output', function () {
var prefixOutputWith = (prefixString) => {
return (callback, args, name, type) => {
var result = callback();
return prefixString + result;
};
};
class SuperNiceClass {
(prefixOutputWith('Hello '))
message() {
return "world";
}
}
let instance = new SuperNiceClass();
assert.equal(instance.message(), 'Hello world');
});
it('should skip calling a method ', function () {
var skipMethodIf = (condition) => {
return (callback, args, name, type) => {
if (condition){
return;
} else {
return callback();
}
};
};
class SuperNiceClass {
(skipMethodIf(true))
methodShouldBeSkipped() {
assert(false);
}
(skipMethodIf(false))
methodShouldRun() {
assert(true);
}
}
let instance = new SuperNiceClass();
instance.methodShouldBeSkipped();
instance.methodShouldRun()
});
});