オブジェクト階層に基づいて Express.js アプリにルートを追加することを目的とした次の関数を、 vows.js を使用してトピックと誓いの分離を壊すことなくきれいにテストするにはどうすればよいでしょうか?
var addRoutes = function(routeObject, app, path) {
var httpVerbs = ['get', 'post', 'put', 'delete'];
path = path || '';
for(var property in routeObject){
var routesAdded = false;
for (var verbIndex in httpVerbs) {
var verb = httpVerbs[verbIndex];
var completePath, handler;
if (property === verb) {
if (typeof(routeObject[verb]) === 'function') {
handler = routeObject[verb];
completePath = path;
} else {
handler = routeObject[verb].handler;
completePath = path + (routeObject[verb].params || '');
}
app[verb](completePath, handler);
routesAdded = true;
}
}
if (!routesAdded) {
addRoutes(routeObject[property], app, path + '/' + property);
}
}
};
このテストでは、http 動詞に対応する関数がアプリ オブジェクトで呼び出されることを確認する必要があります。たとえば、routeObject が次の場合:
{
tracker: {
message: {
get: {
handler: function (req, res) {
res.send("respond with a resource");
}
}
}
}
}
それから
app.get('/tracker/message', function (req, res) {
res.send("respond with a resource");
});
呼び出す必要があります。