2017-02-07 6 views
0

У меня есть модуль Node, где я пытаюсь подключиться к хосту с:Как я могу высмеять возвращаемое значение функций Nodes net library?

const testConnection = net.createConnection(port, hostname); 

testConnection.on('connect',() => { 
    // connected 
}); 

testConnection.on('error', (err) => { 
    // error 
}); 

Я использую Sinon испытать метод, как это:

sinon.stub(net, 'createConnection', (port, hostname) => { 
    return { 
     on: (string, cb) => { 
     switch(string) { 
       case 'connect': 
        return cb; 
       case 'error': 
        return cb; 
       case 'close': 
        return cb; 
      } 
     } 
    } 
}); 

const testConnection = net.createConnection(10, 'hostname'); 
testConnection.on('error',() => { 
    console.log('here I am'); 
}); 

Но я не могу обернуть мою голову вокруг, как я не должен заглушить/издеваться или подделать метод on-method, чтобы он возвращал ошибку!

Я что-то упустил?

ответ

1

я окурок createConnection возвращаемого значения с поддельным например EventEmitter:

const EventEmitter = require('events'); 
const fakeEE = new EventEmitter(); 
sinon.stub(net, 'createConnection', (port, hostname) => fakeEE); 

// require your code 

// emit events 
fakeEE.emit('error', new Error('Smth bad happened')); 

// observe the result 
// e.g. expect(something).toBeCalled(); 
+0

Если я испустить ошибку, тесты не удается из-за ошибки;) Есть ли способ вокруг него? –

+0

@gruberb, так как в тестируемом коде устанавливается '.on ('error', ...)' обработчик, не будет ошибки типа «событие необработанной ошибки». Таким образом, это способ проверить, что делает ваш код, если соединение испускает ошибку. Или я неправильно понял ваши потребности? –

+0

Извините, мой плохой. Да, это полностью работает :) Спасибо! –

0

Как net является зависимость модуля, я хотел бы использовать proxyquire фальсифицировать этой зависимости. Отлично подходит для нас и с ES6 + Babel.