Вы только утверждаете, что getLoggerOptions(...)
должен возвращать объект, но у вас нет доступа к объекту.
Например, помимо опубликованного теста, попробуйте добавить тест, подобный:
describe.only('#probeLoggerOptions', () => {
it('should do expected logging stuff', () => {
const {name, streams} = getLoggerOptions('test');
for (let stream of streams) {
console.log(`getting logopt for level ${stream.level}`);
expect(stream.stream.write(log), /* ... what to expect */);
}
});
});
Теперь тест вызывает функцию write
в каждом объекте.
ДОПОЛНИТЕЛЬНО : если вы владеете кодом, лучшим способом является его рефакторинг, чтобы сделать его более тестируемым.Например, вместо прямой записи в высокоуровневые потоки process
можно создать WritableStream
, выполнить запись в него, а затем направить в нужный поток process
.
function configureStream(writable = process.stdout, data = null, msg = 'done') {
const stream = fs.createReadStream('/tmp/log');
stream.read(data);
stream.pipe(writable);
}
function stdOutStream() {
return {
write: log => {
// Change log level number to name and write it out
log.level = bunyan.nameFromLevel[log.level];
configureStream(data = JSON.stringify(log) + '\n');
}
}
}
Помимо возможности тестирования configureStream
отдельно, вы также можете абстрагировать содержание каждого процесса каротажа от одной функции, которая уменьшает поверхность теста.Теперь вы также можете подключиться к событиям потока, таким как «pipe» или «finish», чтобы проверить регистрируемый контент.