I’m about 3.5 hours into node.js development, I guess that qualifies me to give advice on it on this Internet thing.

Being the BDD fanatic that I am, I wanted to start off behaviour-driven right from the beginning, and Vows looked like a good choice.

However, I quickly came to the point where I needed to stub out a dependency in one of my modules, and as far as I can see, Vows doesn’t provide mocking/stubbing. But https://github.com/felixge/node-gently does, and here is my approach at combining these two:

This is the Vows spec: var gently = global.GENTLY = new (require("gently")); var vows = require("vows"), assert = require("assert"); var myModule = require("MyModule"); vows.describe("My Module").addBatch({ "when calling its foo() method": { topic: myModule, "it triggers a console message": function (topic) { gently.expect(gently.hijacked.sys, "puts", function(str) { assert.equal(str, "Hello World"); }); topic.foo("Hello World"); } } }).export(module);

And this is the implementation of MyModule: if (global.GENTLY) require = GENTLY.hijack(require); var sys = require("sys"); function foo(message) { sys.puts(message); return true; } exports.foo = foo;

No idea if this makes any sense in the long run – I will tell you when I’m about 14 hours or so into BDD node.js development…

If you would like to be informed on updates to this post, just follow @manuelkiessling