diff --git a/ospec/ospec.js b/ospec/ospec.js index f0491bbd..9b426d99 100644 --- a/ospec/ospec.js +++ b/ospec/ospec.js @@ -19,11 +19,14 @@ module.exports = new function init() { ctx = parent } o.only = function(subject, predicate) {o(subject, only = predicate)} - o.spy = function() { + o.spy = function(fn) { var spy = function() { spy.this = this spy.args = [].slice.call(arguments) spy.callCount++ + + if(fn) + return fn.apply(this, arguments) } spy.args = [] spy.callCount = 0 diff --git a/ospec/tests/test-ospec.js b/ospec/tests/test-ospec.js index 138d185d..fc40c17f 100644 --- a/ospec/tests/test-ospec.js +++ b/ospec/tests/test-ospec.js @@ -49,6 +49,23 @@ o.spec("ospec", function() { o(spy.args.length).equals(1) o(spy.args[0]).equals(1) }) + o("spy wrapping", function() { + var spy = o.spy(function view(vnode){ + this.drawn = true + + return {tag: "div", children: vnode.children} + }) + var children = [""] + var state = {} + + var output = spy.call(state, {children: children}) + + o(spy.callCount).equals(1) + o(spy.args.length).equals(1) + o(spy.args[0]).deepEquals({children: children}) + o(state).deepEquals({drawn: true}) + o(output).deepEquals({tag: "div", children: children}) + }) }) o.spec("async", function() { var a = 0, b = 0