У меня есть функция, которая возвращает обещание ES6 для использования в другой внешней цепочке обещаний. Функция сканирует сети Wi-Fi, используя child_process.exec. Выход из Exec отправляется через обратный вызов к синхронной функции синтаксического анализа, которая будет возвращать выход в виде форматированного объекта, а затем разрешить внешний посыл:Mocha/Sinon - Модульная проверка/функция stubbing с child_process.exec внутри ES6 Promise
var exec = require('child_process').exec;
function scan() {
return new Promise((resolve, reject) => {
// getCurrent returns a promise
getCurrent().then(network => {
exec('iwlist wlan0 scan', function(err, stdout, stderr) {
(err) ? reject(stderr) : resolve(parseOutput(stdout, network));
});
})
.catch(err => {
reject(err);
});
});
}
проблема, я не могу показаться, чтобы получить Sinon которые работают правильно, чтобы получить названную версию exec. В настоящее время у меня есть что-то вдоль линий:
var wifi = require('./wifi');
describe('#scan', function() {
it('Should scan and return networks object', function() {
var fakeNetwork = '(fake iwlist output goes here)';
var exec = sinon.stub(child_process, 'exec').yields(false, fakeNetwork);
var getCurrent = sinon.stub(wifi, 'getCurrent').returns(Promise.resolve('current-ssid'));
wifi.scan().then(function(networks) {
console.log(networks);
sinon.assert.calledOnce(getCurrent);
sinon.assert.calledOnce(exec);
});
getCurrent.restore();
exec.restore();
});
});
Я также попытался гася как:
var getCurrent = sinon.stub(wifi, 'getCurrent', function() {
return Promise.resolve('current-ssid').then(network => {
exec('iwlist wlan0 scan', function(err, data) {
return(wifi.parseOutput(data, network));
});
});
});
поведение, кажется, что либо Exec никогда не вызывается, или более странно, что погасил Exec вызывается, но «реальные» функции вызываются в любом случае.
Со всеми заглушками, все, что я действительно «тестирую», является методом parseOutput, поэтому я должен полностью отключить тестирование функции «сканирования» и сосредоточиться только на функции синтаксического анализа (которая будет проста в тестировании) или есть другой способ, которым я должен смотреть на это?
Я считаю, что я просто делаю что-то явно не так, и вот уже несколько часов стучаю по стене. Я надеюсь, что кто-то столкнется с этим раньше и может предложить альтернативный/лучший подход.