2013-02-20 3 views
0

У меня есть файл foo.js который выглядит следующим образом:Утверждайте внутренняя функция называется

var exec = require('child_process').exec 
... 
function start(){ 
    ... 
    exec('open -g http://localhost:<port>'); // opens a browser window 
} 
// EOF 

Я хочу, чтобы проверить, что, когда я вызываю функцию start(), окно браузера получает открыто. В идеале я хотел бы использовать Sinon для того, чтобы вырезать exec (чтобы мы не фактически открывали окно браузера во время автоматических тестов), и утверждают, что был вызван exec. Я пробовал много способов, ни одна из которых не работает. Например, в foo_test.js:

var subject = require('../lib/foo'); 

describe('foo', function(){ 
    describe('start', function(){ 
    it('opens a browser page to the listening address', function(){ 
     var stub = sinon.stub(subject, 'exec', function(){ 
     console.log('stubbed exec called'); 
     }); // fails with "TypeError: Attempted to wrap undefined property exec as function" 
    }); 
    }); 
}); 

Как бы я идти об этом?

ответ

0

Не уверен, если это то, что вы ищете, но быстрый поиск дал:

https://github.com/arunoda/horaa

В основном, это позволяет гасят библиотеки. Из примеров:

Ваш код

//stored in abc.js 
exports.welcome = function() { 
    var os = require('os'); 

    if(os.type() == 'linux') { 
     return 'this is a linux box'; 
    } else { 
     return 'meka nam linux nemei :)'; 
    } 
}; 

Код проверки (обратите внимание на насмешки ОС)

//stored in test.js 
var horaa = require('horaa'); 
var lib = require('./abc'); // your code 
var assert = require('assert'); 

//do the hijacking 
var osHoraa = horaa('os'); 
osHoraa.hijack('type', function() { 
    return 'linux'; 
}); 

assert.equal(lib.welcome(), 'this is a linux box'); 

//restore the method 
osHoraa.restore('type'); 

Надежда, что помогает.

Смежные вопросы